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

2024-02-11

我遇到一个测验,指出下面第 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=。两种不同的功能,具有不同的限制。

由于无法重新引用引用,因此编译器无法生成任何有意义的隐式赋值运算符。因此它拒绝这样做,并产生错误。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么如果类的成员是引用,则复制对象是非法的? 的相关文章

随机推荐