0

重複の可能性:
空の括弧を含むデフォルトのコンストラクター括弧
付きまたは括弧なしでクラスをインスタンス化しますか?

プログラム:

class Foo
{
   public:
      Foo ( int bar = 1 )
      {
         cout << "bar=" << bar;
      }
};

int main() {

   cout << "0 - ";
   Foo foo_0 ( 0 ) ;
   cout << '\n';

   cout << "1 - ";
   Foo foo_1 ();
   cout << '\n';

   cout << "2 - ";
   Foo foo_4;
   cout << '\n';

   return 0;

}

出力:

0 - bar=0
1 - 
2 - bar=1

質問:例#1が機能しないのに、例#0と#2は機能するのはなぜですか?

4

2 に答える 2

7
Foo foo_1 ();

は関数宣言であり、オブジェクトは作成されません。これは、パラメータを受け取らずにオブジェクトfoo_1を返すという関数です。Foo

そこにオブジェクトを構築する正しい方法があります

Foo foo1;

この概念は、C++の厄介な解析と呼ばれます。簡単に説明すると、宣言として扱うことができるものはすべてです。

于 2012-09-10T08:51:25.450 に答える
-2

foo_1(); つまり、Null Intializeとして知られているので、オブジェクトの作成と値の初期化の違いを知っておく必要があります。

于 2012-09-10T09:15:50.060 に答える