从方法中按值返回 class' 类型的变量

Returning an variable of class' type by value from the method

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

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




};

int main()
{
    Test t;


}

问题是给定的代码不是 compiled.If 我们删除复制构造函数一切顺利。问题是什么?添加 const --Test(const Test& t) 解决了问题,但我不明白为什么。有人可以解释一下吗?谢谢!

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

是的,这个一个拷贝构造函数。

不过,我们通常是这样写的:

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

那是因为这样 更有用;这是我们可以从 "temporary"(例如您的表达式 Test())复制构建 Test 的唯一方法,因为只有对 const 的引用(和右值引用)可能会绑定到临时对象。

与下面的问题相同:

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

或:

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