为什么operator=操作符返回引用

2016-01-29 12:18 7 1 收藏

为什么operator=操作符返回引用,为什么operator=操作符返回引用

【 tulaoshi.com - C语言心得技巧 】


为什么operator=操作符返回引用

赵湘宁 问题:        MSDN文档中解释到:operator=操作符缺省情况下返回引用——
TYPE& TYPE::operator=(const TYPE&)
为什么呢?我对此的理解是:“=”是个二进制操作符。其传入的参数是引用对象,而其它的参数是类实例,“=”在这个类实例中被重载。而我在实际应用中可以不用返回任何类型(void)来实现赋值操作符,并仍然可以完成赋值操作。我这样做正确吗?如果不正确,那么为什么缺省的实现返回引用呢?
解答:
    如果你再花点时间想一想可能就会有答案。其实很简单。operator=返回引用的理由是使你能在一个语句中连接多个赋值。
TYPE a,b,c,d;

a = b = c = d;

编译器是象这样解释前面一行的:

a = (b = (c = d));

在编译过程中,赋值是右结合的。说白了就是如果你想要玩一下多个赋值,operator=返回的东西必须是右(rhs)赋值。除了返回对对象自身的引用还能有什么呢?这就是为什么operator=最后一行总是返回对this的引用:
CMyClass& CMyClass::operator=(const CMyClass& rhs) {
...... 
// do the 
// assignment
return *this;
};

rhs参数被声明为常量的话,就允许常量对象的赋值。没有理由不允许。为什么operator=要返回非常量引用呢?所以不管在哪里你都能使用赋值语句对TYPE进行引用:
void MyFunc(TYPE& a);
...
TYPE a,b;
MyFunc(a=b); // 赋值以后传递

由于operator=返回非常量,你甚至可以使用圆括弧重载通常的等号结合率:
TYPE a,b,c;
(a = b) = c;

图一是简单的示例。并有一个问答题:当你完成并运行FOO时,它的输出是什么?
如果你想要学习更多的关于赋值操作的内容,我强烈推荐一本书《Effective C++》作者是Scott Meyers。本书由Addison Wesley Longman, 1997出版。








(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

来源:http://www.tulaoshi.com/n/20160129/1485459.html

延伸阅读
unit WinForm;interfaceuses System.Drawing, System.Collections, System.ComponentModel, System.Windows.Forms, System.Data;type TWinForm = class(System.Windows.Forms.Form) {$REGION 'Designer Managed Code'} strict private /// summary /// Required designer variable. /// /summary Components: System....
标签: SQLServer
  cube操作符 要使用cube,首先要了解group by 其实cube和rollup区别不太大,只是在基于group by 子句创建和汇总分组的可能的组合上有一定差别, cube将返回的更多的可能组合。如果在 group by 子句中有n个列或者是有n个表达式的话, sqlserver在结果集上会返回2的n-1次幂个可能组合。 注意: 使用cube操作符时,最多可以有10个分组表达...
标签: PHP
四、 扩展"instanceof"操作符的使用:嵌套(X)HTML widget 好。你已经看到了"instanceof"操作符在被直接注入到页面生成器类的输入 对象 进行类型检查方面所表现出的良好功能。现在,我将再进一步来把一个检查例程添加到(X)HTML widget类的构造器和"getHTML()"方法中,这样它们可以接受其它的widget作为输入参数。请检查下面...
标签: PHP
一、简介 在 PHP 中实现强制 对象 类型有时可能非常重要。如果缺少了它,或是因为缺乏这方面的知识——基于不正确的编程假设,或者仅仅是由于懒惰,那么你会在特定的Web应用程序中看到你所不希望的结果。特别是当用PHP 4进行编程时,使用"is_a()"函数(尽管还有其它方法)来验证你所使用的对象的类型是非常容易的事情。毫...
C++ 中重载 + 操作符的正确方法 作者:Danny Kalev 编译:MTT 工作室 原文出处:Overloading Operator + the Right Way 摘要: 本文概要性地介绍如何选择正确的策略来为用户定义类型重载 + 操作符。 用户...

经验教程

489

收藏

54
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部