当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

为什么operator=操作符返回引用[VC/C++编程]

赞助商链接



  本文“为什么operator=操作符返回引用[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

问题:

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出版.


  以上是“为什么operator=操作符返回引用[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 为什么operator=操作符返回引用
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .