使用赋值运算符返回*this

Ily*_*lya 4 c++

我开始制作自己的复制构造函数,这对我来说总体上是有道理的.但是,关于做自己的赋值操作符的主题,我需要有人为我填写空白.

我几乎不知道为什么你要在所有的例子中返回*,例如下面的例子:

Foo & Foo::operator=(const Foo & f)
{

//some logic

return *this;

}
Run Code Online (Sandbox Code Playgroud)

所以,如果我有一些陈述,如:

Foo f;
f.hour = 7;

Foo g;
g = f;
Run Code Online (Sandbox Code Playgroud)

赋值运算符运行后,它将返回对g对象的引用(*this).所以现在的问题是,我现在不会有这样的含义吗?:

g = g (g being a reference)
Run Code Online (Sandbox Code Playgroud)

事实上,在设置对象之前,只会引起复制构造函数的调用.在这种情况下,它甚至不适合复制构造函数的签名.

Don*_*ner 7

你想要返回*this所以你可以链接=:

Foo f, g, h;

f = g = h;
Run Code Online (Sandbox Code Playgroud)

这基本上是分配hg,然后分配g(返回return *this)到f:

f = (g = h);
Run Code Online (Sandbox Code Playgroud)

有时使用的另一种情况是在条件中进行赋值(被许多人认为是坏的风格):

if ( (f = 3).isOK() ) {
Run Code Online (Sandbox Code Playgroud)

在声明中g = f;,返回被忽略,就像你做的那样3 + 4;.

  • 或者更经典的例子`((f = func_returning_f())!= f_to_ignore)` (3认同)