对于复制构造函数来说很重要

Is Const important for Copy Constructor?

本文关键字:构造函数 于复制 复制      更新时间:2023-10-16

我正在在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() Calledn";
    Test t;
    return t;
}
int main()
{
    Test t1;
    Test t2 = fun();
    return 0;
}

传统上将复制构造函数称为

Foo(const Foo&);

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

在标准C 中,您无法将临时性绑定到非const参考。Visual Studio使用非标准扩展名,这就是为什么您的代码编译,但您不应依靠非标准扩展。

并非绝对必须让您的复制构造函数通过const参考将RHS取用,也可以通过参考将其拿走。但是在这种情况下,您将无法从rvalue执行复制初始化(基本上是临时的)。