以下の例を検討してください。
#include <iostream>
using namespace std;
class Test{
public:
int a;
Test(int a=0):a(a){ cout << "Ctor " << a << endl;}
Test(const Test& A):a(A.a){ cout << "Cpy Ctor " << a << endl;}
Test operator+ ( Test A){
Test temp;
temp.a=this->a + A.a;
return temp;
}
};
int main()
{
Test b(10);
Test a = b ;
cout << a.a << endl;
return 0;
}
出力は次のとおりです。
$ ./Test
Ctor 10
Cpy Ctor 10
10
Copy コンストラクターを呼び出します。ここで、コードを次のように変更するとします。
int main()
{
Test b(10);
Test a = b + Test(5);
cout << a.a << endl;
return 0;
}
出力は次のようになります。
$ ./Test
Ctor 10
Ctor 5
Ctor 0
15
式Test a = b + Test(5);
はコピー コンストラクターを呼び出しません。typeb+ Test(5)
の新しいオブジェクトをインスタンス化するために使用する必要があると私が考えたので、これはコピーコンストラクターを呼び出す必要があります。誰かが出力を説明できますか?a
Test
ありがとう