2

重複の可能性:
C++ でのさまざまなタイプの初期化

次のような基本コンストラクターの呼び出しに違いはありますか

Foo afoo;

Foo afoo();
4

1 に答える 1

2

はい: 1 つ目は変数定義、2 つ目は関数宣言です。ここで、これら 2 つの式の違いに関するさらに興味深い問題について説明します。

new Foo()
new Foo

違いがあるかどうかは、の種類Fooとそのメンバーによって異なります。

  • 明示的なデフォルトコンストラクターがある場合Foo、2つは同一です
  • デフォルトのコンストラクターがない場合、違いが生じる可能性があります! 集合体または組み込み型のメンバーがある場合、最初の式で初期化されますが、2 番目の式では初期化されませんが、既定の構造を持つすべてのメンバーが既定で構築されます。

これはクラスのメンバーにも適用されることに注意してください。変数の場合、括弧を使用したフォームは使用できません。つまり、オブジェクトが初期化されていることを確認するには、使用する必要があります

Foo aFoo = Foo();

引数を取る明示的なコンストラクターがない場合、または不明な場合 (テンプレート コードなど)。

于 2012-01-12T18:54:19.423 に答える