我开始制作自己的复制构造函数,这对我来说总体上是有道理的.但是,关于做自己的赋值操作符的主题,我需要有人为我填写空白.
我几乎不知道为什么你要在所有的例子中返回*,例如下面的例子:
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)
事实上,在设置对象之前,只会引起复制构造函数的调用.在这种情况下,它甚至不适合复制构造函数的签名.
你想要返回*this所以你可以链接=:
Foo f, g, h;
f = g = h;
Run Code Online (Sandbox Code Playgroud)
这基本上是分配h到g,然后分配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;.