2

A は次のように定義されたクラスです。

class A
{
  public:
     int x; 
}

そしてメイン:

int main()
{
   A(ob);    // note that copy constructor doesn't get called
   ob.x = 1; // just to show that ob's members can be accessed
}

別の main() を次に示します。

int main()
{
  A ob;
  A ob2 = A(ob); // copy constructor gets called and everything happens as expected
}

C++ でこのようなインスタンス化を見たことがありません。obA(ob)は、以前に宣言されたオブジェクトであった A のコンストラクターを呼び出すことによって、関数スタイルの型キャストになるはずではありませんか?

編集: 2 番目の main() では、A(ob) が の初期化子として使用されますob2

4

2 に答える 2

3
A(ob); 

以下と同じです:

A ob; 

ブレースは不要です。したがって、以下は上記と同じです。

A((ob)); 
A(((ob))); 
A((((ob)))); 

すべて同等です。しかし、それはあなたがこれを書くべきだという意味ではありません。読みやすいものだけを書いてください。

于 2013-09-26T19:20:26.657 に答える
3

奇妙に思えるかもしれませんが

A(ob);

と同等です

A ob;

あなたのコードで。

于 2013-09-26T19:18:23.943 に答える