从方法中按值返回 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
先生们,美好的一天! 让我们考虑一下代码:
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