2012-02-15 13 views
4

関数またはメンバ関数のデフォルト引数の有効な式は、どのようなものがありますか?デフォルトの関数引数の有効な式

+0

もっと具体的にする必要があります。 –

+0

私の質問は意図的に一般的です。私はデフォルトの引数として使用できる表現のタイプを知りたい。 SOはバグを修正するための助けを求めているだけではありません。 –

+0

http://msdn.microsoft.com/en-us/library/e1dbzf09.aspx –

答えて

4

関数パラメータの型の変数への代入のコンテキスト内で正しいものは何でも。コンパイル時

編集
デフォルト引数は、などのタイプの正しさの点で評価されているが、それらが計算されていないと何の割り当ては、実行時まで行われません。実際の計算/代入は、関数呼び出し時に行われるのではなく、関数呼び出し時に行われるのではなく、関数呼び出し時にクラスが定義されている限り、デフォルトの引数としてまだ定義されていないクラスのコンストラクタを指定することができます。関数宣言/定義の。

例:

#include <iostream> 

void foo(int a = std::rand()) 
{ 
    std::cout << a << std::endl; 
} 

int main(void) 
{ 
foo(); 

return(0); 
} 

Program output on ideone.com

1804289383

+0

これは誤りです。実行時にのみ決定できる変数に物を割り当てることはできますが、それらをデフォルトの引数として使用することはできません。たとえば、 'int a = std :: rand()'を実行できますが、 'void Class :: foo(int a = std :: rand())'を実行することはできません。 –

+0

@EmileCormierあなたは間違っています。 – lapk

+0

おっと、申し訳ありません。私は私の誤った先入観が再び私のより良いものになるようにしています。 –

4

これはC++ 03規格のセクション8.3.6に詳述されています。基本的には、ローカルスコープのものに依存しない式になります。したがって、ローカル変数、関数のパラメータ、または「this」に依存する式は除外されます。

+0

これは、AzzAの答えをうまく補うものです。私は両方の答えを受け入れることができたらいいと思う。 –

関連する問題