2012-01-12 14 views
2

なし対括弧でデフォルトコンストラクタを呼び出す:
different types of initialization in C++C++の可能性の重複括弧

する

Foo afoo; 

などの基本コンストラクタを呼び出す間にまったく差があります対

Foo afoo(); 
+6

はい、#2は関数を宣言しています。 –

+1

はい、最初のものは 'Foo'型のオブジェクトを構築し、2番目のものは生成しません。 –

答えて

2

はい:最初は可変定義、2番目は関数宣言です。現在、これらの二つの表現の違いをより興味深い質問について話し合うことができます:違いがあるかどうか

new Foo() 
new Foo 

Fooの種類とそのメンバーに依存して! Fooは、明示的なデフォルトコンストラクタを持っている場合は、デフォルトのコンストラクタが存在しない場合

  • は、2つの
  • 同一であり、潜在的に差があります!集約型または組み込み型のメンバーがある場合、最初の式で初期化されますが、2番目の式では初期化されません。ただし、デフォルトの構成を持つすべてのメンバーはデフォルトで構築されます。

これは、クラスのメンバーにも当てはまります。変数の場合、あなたがそこに引数を取る明示的なコンストラクタはありませんか、あなたがわからない場合は、オブジェクトは、あなたが

Foo aFoo = Foo(); 

を使用する必要が初期化されていることを確認するために、すなわち、括弧を使用してフォームを、使用することはできません(たとえば、テンプレートコードで) 。

+0

故障のためにありがとう、繰り返し申し訳ありません? – pyInTheSky