たとえば、私はクラスAを持っています
今私がやっているとき
A a(A());
正確には何が起こりますか?
たとえば、私はクラスAを持っています
今私がやっているとき
A a(A());
正確には何が起こりますか?
外観にもかかわらA a(A());
ず、オブジェクト定義ではありません。a
代わりに、を返し、A
何も取らず を返す関数へのポインタを受け取る関数を宣言しますA
。
オブジェクト定義が必要な場合は、別の括弧のペアを追加する必要があります。
A a((A()));
正しく記述されている場合 - A a((A()))
- コンパイラーは、余分なコピーを防ぐために、コンストラクターのコンテキストで一時的なものを直接作成します。それはコピー省略と呼ばれます。RVO と NRVO とともに、これを調べてください。
あなたのコメントから:
A a = A();
これは正確に
A a((A())); // note extra pair of parenthesis
@Naveenが正しく指摘したように、A a(A());
最も厄介な解析の対象となるため、実際にオブジェクトを作成するには追加の括弧が必要です。