-1

以下を含むクラスがある場合:

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;
4

2 に答える 2

6

'default'コンストラクターが使用されることはありますか?

いいえ、引数を指定しないコンストラクター呼び出しは単純にあいまいになります。コンパイラーは、引数を受け入れないコンストラクターがデフォルト値の引数を受け入れるコンストラクターよりも好ましいか、またはその逆かを判断できません。コードはコンパイルされません

の違い:foo * quux = new foo;

いいえ、同じ話です。を使用してオブジェクトを作成している場合、何も変更されませんnew。コンパイラーは、呼び出すコンストラクターを決定できません。

于 2013-03-11T00:17:24.410 に答える
1

これはあいまいな呼び出しです。そのため、コンパイルすらすべきではないと思います。foo::foo(int)コンパイラーは、コンストラクターを呼び出すのか、デフォルトのコンストラクターを呼び出すのかを判断できませんfoo::foo()

于 2013-03-11T00:17:16.783 に答える