0

考虑下面的例子:

#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,所以这应该调用复制构造函数。有人可以解释输出吗?

谢谢

4

1 回答 1

2

见复制省略:http ://en.wikipedia.org/wiki/Copy_elision

基本上,不构造任何 temp 并将结果直接放入 Test 对象中。

于 2013-07-09T11:37:49.983 回答