码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-11-12 16:22:32      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   sp   div   log   代码   ef   as   

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

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了。

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

标签:style   blog   color   sp   div   log   代码   ef   as   

原文地址:http://www.cnblogs.com/hustcser/p/4092429.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!