差不多最经典的就是这个了:
x = y = z = 15; 解读为: x = (y = ( z = 15));
如果没有返回值,上述代码就不能通过编译。
其实看到标题就差不多明白这一条了,但是为什么连续赋值时最好让其返回一个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了。