问题 是否有正当理由不从复制赋值运算符返回* this? [重复]


这个问题在这里已有答案:


7442
2018-05-20 21:34


起源

你什么时候回来 this*,你可以将赋值运算符链接起来 i = j = k = ...。您可以返回其他内容,但有用的方法将取决于您的定义以及您希望如何使用类 - Alex
表达模板。 - Alan Stokes
@AlanStokes如果你详细说明,那就太好了,你知道。 - Marius Bancila
有趣的问题,但你为什么要问?真的是吗? 实用,详细的问题?然后尝试展示它。 - Wolf
注意:重复的答案探索各种场景 *this 不归还 - M.M


答案:


标准的例子是 std::atomic。它返回指定的值。如果它返回引用,那么通读它可能会产生不同的结果。


9
2018-05-20 21:44



你知道其他的例子吗? - Wolf
@Wolf:Boost :: Phoenix是一个创建懒惰表达式的库。所以 operator=() 会返回一些你可以调用的对象 operator()() 实际执行任务。 - Bill Lynch
@BillLynch这似乎是艾伦斯托克斯提到的? - Wolf


如果要防止分配链接。

有时它很好地防止这样的表达式:

x = y = z = a = b = c = d = foo{15};

因此,您使赋值运算符返回void。

struct foo {
    void operator=(const foo &);
};

对于某些类型的链接没有意义。但是你必须根据具体情况来看待这个问题。


0
2018-05-20 22:44