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

原创 2001年04月03日 18:07:00
vckbase.gif VCKBASE Online Help Journal No.10  

为什么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出版。









©1997-2000 VCKBASE.COM All Rights Reserved.

C++运算符重载,+-*/的重载,返回值为什么是对象而不是对象的引用?而流操作符<< 和 >> 却返回的是引用?

 原因是: +,-,*等返回不了引用,比如+运算符,可以如下重载(为了简单,假设A 只有int x;int y) A operator+(A a,A b) {A sum;   sum...
  • csdnxq
  • csdnxq
  • 2015年05月02日 21:38
  • 1132

赋值运算符重载函数 返回引用和返回对象的区别

赋值重载符的定义 返回引用和返回对象的区别#include "stdafx.h" #include using namespace std;class CStudent { public: C...
  • miyunhong
  • miyunhong
  • 2016年04月14日 10:19
  • 1362

位操作符(bitwise operator)

位操作符允许我们操作一个基本数据类型中的整数型值的单个“比特(bit)”,即二进制位。 位操作符会对两个参数对应的位执行布尔代数运算,并最终生成一个结果。 位操作符来源于 C 语言面向...
  • u011282051
  • u011282051
  • 2013年08月20日 17:43
  • 1667

C++ operator关键字(重载操作符)

http://blog.sina.com.cn/s/blog_4b3c1f950100kker.html    operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应...
  • ly930156123
  • ly930156123
  • 2017年12月20日 14:11
  • 59

C++ operator关键字(重载操作符)

operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。    这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一...
  • zhongliangzhihou
  • zhongliangzhihou
  • 2012年04月19日 23:21
  • 397

重载数组下标操作符,使用operator

重载数组下标操作符,使用operator 原贴:http://blog.csdn.net/keeplooking2510/article/details/8042057     数组在类的定义中...
  • gencheng
  • gencheng
  • 2015年04月01日 14:43
  • 1463

C++ operator关键字(重载操作符)

operator是C++的关键字,是C++扩展运算符功能的方法,它和运算符一起使用,表示一个运算符函数...
  • huanghuihuang1991
  • huanghuihuang1991
  • 2016年10月15日 21:22
  • 330

sizeof不是函数,而是C/C++中的一个操作符(operator)

sizeof(int)说明sizeof不是一个函数,函数不接受int做为形参 sizeof  int 也可以说明sizeof不是一个函数,因为实参没有加() ...
  • e3399
  • e3399
  • 2012年04月14日 13:01
  • 781

[019]转--C++ operator关键字(重载操作符)

http://www.cnblogs.com/hustcser/p/4173758.html 原博客:http://www.cnblogs.com/speedmancs/archive/201...
  • chen_lin111
  • chen_lin111
  • 2015年11月27日 11:39
  • 411

MFC中使用自定义CObject派生类重载“=”“==”操作符 error C2248: “CObject::operator =” error C2678: 二进制“==”

近期编程想用CList维护一个对象,来方便的实现增,删,改,查,里面要放多个元素,想实现这种,就要自己写结构体,或是类。类的话就让他派生自CObject吧,然后接下来会遇到两个问题,我在这里整理一下我...
  • panshiqu
  • panshiqu
  • 2013年08月01日 11:03
  • 2014
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为什么operator=操作符返回引用
举报原因:
原因补充:

(最多只允许输入30个字)