以下のコードから、クラス CA に対して次のものが呼び出されることを期待していました
- 関数によって返される一時オブジェクトを作成するコンストラクタ
foo
a
メインの変数に渡す変数を作成するコピーコンストラクタa
関数によって返された値から変数を作成する別のコピー コンストラクター。
なぜそうではないのですか?私が持っている結果はちょうど
A
期待してたのに
ABB
したがって、コンストラクターのみが呼び出されます。コンパイラは舞台裏で何かを最適化していますか、それとも C++ の概念を見逃していますか?
class CA{
public:
CA(){ std::cout << "A"; }
CA( const CA& ){ std::cout << "B"; }
CA& operator=(const CA& ){ std::cout << "C";return *this; }
};
CA foo(){
return CA();
}
int main(){
CA a = foo();
}