从方法返回类的类型变量

时间:2015-01-30 18:37:31

标签: c++ copy return-value copy-constructor

美好的一天,先生们! 让我们考虑一下代码:

class Test
{
    int a;
public:
Test(){}
Test( Test& t){cout<<"hello\n";} //copy constructor
Test foo() { return Test();}




};

int main()
{
    Test t;


}

问题是给定的代码没有编译。如果我们删除了复制构造函数,一切顺利。问题是什么?添加 const - Test(const Test& t)解决了这个问题,但我无法理解为什么。有人可以解释一下吗?谢谢!

1 个答案:

答案 0 :(得分:3)

Test( Test& t){cout<<"hello\n";}

是的,这个的复制构造函数。

但是,我们通常这样写:

Test(const Test& t){cout<<"hello\n";}

那是因为这种方式更有用;这是我们可以从“临时”(例如你的表达式Test)复制构造Test()的唯一方法,因为只有引用到const(和rvalue引用)可以绑定对临时工。

与以下问题相同:

      int& r1 = 3;    // :(
const int& r2 = 3;    // :D

或:

      int& r1 = f();  // :(
const int& r2 = f();  // :D