12

オブジェクトのオーバーロード関数のデフォルトについて質問があります。

次のような関数シグネチャがある場合、デフォルト値は1回だけ評価されますか、それとも毎回評価されますか?

class X
{
  public:
  f(const RWDate& d=RWDate::now());
}

// when calling f() do I get the current time each time?
X z;
z.f();

// is the default value of d recaculated in the function call?
z.f();
4

1 に答える 1

18

デフォルトの引数は呼び出しサイトで置き換えられるため、次のようz.f()に変換されます。

z.f(RWDate::now())

したがって、デフォルトの引数は、関数が呼び出されてデフォルトの引数が使用されるたびに評価されます。

于 2011-04-14T21:26:32.080 に答える