Const是否对Copy Constructor很重要?

时间:2015-05-12 05:54:04

标签: c++ class oop constructor copy

我在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;
}

1 个答案:

答案 0 :(得分:4)

复制构造函数传统上声明为

Foo(const Foo&);

因为假设副本不会改变右侧的对象(至少一个好的复印机不应该改变它,对吗?)

在标准C ++中,您无法将临时绑定到非const引用。 Visual Studio使用非标准扩展,这就是您的代码编译的原因,但您不应该依赖非标准扩展。

不一定要让你的拷贝构造函数通过const引用获取rhs,也可以通过引用来获取它。但在这种情况下,您将无法从右值执行复制初始化(基本上是临时的)。