为什么operator=操纵符返回引用
当前位置:以往代写 > C/C++ 教程 >为什么operator=操纵符返回引用
2019-06-13

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

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

    关键字:

在线提交作业