我在DEV C ++上运行这个程序,它显示了const的错误..但在Visual Studio中它的工作正常。现在对于复制构造函数来说const是重要的吗?
#include<iostream>
using namespace std;
class Test
{
/* Class data members */
public:
Test(Test &t) { /* Copy data members from t*/}
Test() { /* Initialize data members */ }
};
Test fun()
{
cout << "fun() Called\n";
Test t;
return t;
}
int main()
{
Test t1;
Test t2 = fun();
return 0;
}
答案 0 :(得分:4)
复制构造函数传统上声明为
Foo(const Foo&);
因为假设副本不会改变右侧的对象(至少一个好的复印机不应该改变它,对吗?)
在标准C ++中,您无法将临时绑定到非const
引用。 Visual Studio使用非标准扩展,这就是您的代码编译的原因,但您不应该依赖非标准扩展。
不一定要让你的拷贝构造函数通过const
引用获取rhs,也可以通过引用来获取它。但在这种情况下,您将无法从右值执行复制初始化(基本上是临时的)。