以下を含むクラスがある場合:
foo(); //sets baz to 10
foo(int bar = 0); //sets baz to bar
int baz;
'default'コンストラクターが使用されることはありますか?
例:
foo qux;
デフォルトはbaz=0または10?
の違い:
foo * quux = new foo;
以下を含むクラスがある場合:
foo(); //sets baz to 10
foo(int bar = 0); //sets baz to bar
int baz;
'default'コンストラクターが使用されることはありますか?
例:
foo qux;
デフォルトはbaz=0または10?
の違い:
foo * quux = new foo;
'default'コンストラクターが使用されることはありますか?
いいえ、引数を指定しないコンストラクター呼び出しは単純にあいまいになります。コンパイラーは、引数を受け入れないコンストラクターがデフォルト値の引数を受け入れるコンストラクターよりも好ましいか、またはその逆かを判断できません。コードはコンパイルされません。
の違い:
foo * quux = new foo;
いいえ、同じ話です。を使用してオブジェクトを作成している場合、何も変更されませんnew
。コンパイラーは、呼び出すコンストラクターを決定できません。
これはあいまいな呼び出しです。そのため、コンパイルすらすべきではないと思います。foo::foo(int)
コンパイラーは、コンストラクターを呼び出すのか、デフォルトのコンストラクターを呼び出すのかを判断できませんfoo::foo()
。