次のコードの場合:
#include<iostream>
using namespace std;
class Test
{
public:
Test(const Test &t) { cout<<"Copy constructor called"<<endl;}
Test() { cout<<"Constructor called"<<endl;}
};
Test fun()
{
cout << "fun() Called\n";
Test t;
return t;
}
int main()
{
Test t1;
Test t2 = fun();
return 0;
}
コピーコンストラクターがいつ呼び出されるかについて、私は本当に混乱していますか? 上記のプログラムを実行している場合と同様に、コピーコンストラクターは呼び出されません。つまり、コピー コンストラクターに渡されたパラメーターを台無しにしている場合 (const キーワードを削除している場合)、コンパイラ エラーは表示されません。しかし、そのショー
"'Test::Test(Test)' の呼び出しに一致する関数がありません"
さらに、 fun() は、 fun() の実行中に作成される test 型のオブジェクトを返します。ここでコピーコンストラクターが呼び出されないのはなぜですか?
int main()
{
fun();
return 0;
}
また、メイン関数に次の変更を加えている場合、コピーコンストラクターが2回ではなく1回だけ呼び出されるのはなぜですか?
int main()
{
Test t2 = fun();
Test t3 = t2;
return 0;
}