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 并不是绝对必要的,通过引用获取它也是可以的。但在那种情况下,您将无法从右值(基本上是临时的)执行复制初始化。
我是 运行 这个 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 并不是绝对必要的,通过引用获取它也是可以的。但在那种情况下,您将无法从右值(基本上是临时的)执行复制初始化。