[Effective C++ --010]令赋值操作符返回一个reference to *this

时间:2023-03-10 04:32:53
[Effective C++ --010]令赋值操作符返回一个reference to *this

差不多最经典的就是这个了:

x = y = z = ;
解读为:
x = (y = ( z = ));

如果没有返回值,上述代码就不能通过编译。

其实看到标题就差不多明白这一条了,但是为什么连续赋值时最好让其返回一个reference to *this呢?

我们来举一个例子:

如果我们定义一个类R:

R r1(3, 4);
R r2;
R r3(4, 3);
cout << "r1 = " << r1 << ", r2 = " << r2 << ", r3 = " << r3 << endl;
(r3 = r2) = r1; //注意这里
cout << "r1 = " << r1 << ", r2 = " << r2 << ", r3 = " << r3 << endl;

其实从编译器角度来看,是不是reference都是OK的。

但在有注释的代码行处,是不是reference返回的结果是不同的。
如果是reference,那么r3的值会被r1覆盖;

如果不是reference,那么r3的复本被r1覆盖,但r3本身不会改变。
对于连等,一般还是觉得r3的值跟r1一样会比较正常,所以加上reference,当然如果你刻意不想让r3在连等中改变两次值,那就不要reference了。