复制构造函数和运算符重载:C ++

时间:2013-07-09 11:35:50

标签: c++ copy-constructor

考虑以下示例:

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

由于

1 个答案:

答案 0 :(得分:2)

请参阅copy elision:http://en.wikipedia.org/wiki/Copy_elision

基本上,没有构造临时值,结果直接放入测试对象。<​​/ p>