Const 对 Copy Constructor 重要吗?

Is Const important for Copy Constructor?

我是 运行 这个 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;
}

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

Foo(const Foo&);

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

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

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