我遇到一个测验,指出下面第 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(使用前将#替换为@)