【发布时间】:2015-05-12 05:54:03
【问题描述】:
我在 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;
}
【问题讨论】:
-
这与复制构造函数无关。
-
@juanchopanza 是,
main()中的第二行使用复制初始化,编译失败。 -
@vsoftco 是的,但问题与复制构造函数无关。我可以提供一个在矩阵求逆中出现相同错误的示例。
-
一些(尤其是较旧的)编译器不会强制限制将非
const引用(例如您的复制构造函数参数)绑定到临时对象(例如@987654325 返回的Test@的)。没什么大不了的,只需修复代码,以便复制构造函数通过const引用接受。 VC++ 竭尽全力避免破坏旧代码,除非您根据重复的答案提供特定的命令行选项。 -
@juanchopanza 起初我认为 OP 也在询问拥有一个接受其参数的复制构造函数是否合法。通过非常量引用。
标签: c++ class oop constructor copy