考虑下面的例子:
#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);
不调用复制构造函数。我认为b+ Test(5)
应该用它来实例化一个a
类型的新对象Test
,所以这应该调用复制构造函数。有人可以解释输出吗?
谢谢