c++ - 如果类的成员是引用,为什么复制对象是非法的?

标签 c++ copy copy-constructor

我遇到了一个测验,说下面第 18 行的代码格式错误,因为“当需要复制的成员之一是引用时,使用隐式定义的赋值运算符格式错误。”

我无法理解。为什么无法复制引用?为什么 16 号线是合法的?第 16 行与第 18 行非常相似,复制构造函数仍然需要进行复制,对吧?

1 #include <iostream>
2
3 struct A
4 {
5   A(int& var) : r(var) {}
6
7   int &r;
8 };
9
10 int main(int argc, char** argv)
11 {
12   int x = 23;
13
14   A a1(x);
15
16   A a2 = a1;
17
18   a2 = a1;
19
20   return 0;
21 }

最佳答案

第 16 行使用复制构造函数,第 18 行使用赋值运算符 operator=。具有不同限制的两种不同功能。

因为无法重新绑定(bind)引用,所以编译器无法生成任何有意义的隐式赋值运算符。因此它拒绝这样做,并产生错误。

复制构造函数第一次生成对象,因此它可以像在自己的构造函数中那样绑定(bind)该引用。

关于c++ - 如果类的成员是引用,为什么复制对象是非法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27792604/

相关文章:

c++ - 为整数类型重载运算符 ^

c++ - 与 GCC 配合使用的适用于 Windows 7 的免费 C/C++ IDE

python - 有没有办法使我的相机的视平面与场景中的物体表面平行?

php - HTML 表单默认值为空,除非用户单击按钮?

c# - 检索辅助显示器 DPI 的正确方法是什么?

java - 在 Android 中移动和重命名文件

Windows 批处理文件 : Convert Structures into Single Lines Strings

c++ - 自毁:this->MyClass::~MyClass() vs. this->~MyClass()

c++ - 复制构造函数的用途是什么,而赋值运算符 '=' 也可以这样做?

c++ - 关于 std::vector<T> object[arraySize] 的可能误解