从复制赋值运算符中不返回*this是否有合理的理由?

11

假设有一个结构体或类 foo,它有一个复制赋值运算符:

struct foo {
    foo &operator=(const foo &);  // or with some other return type?
};

operator=()返回除*this之外的任何内容是否有意义?将其用于与赋值无关的其他目的并不合理。


1
当你返回 this* 时,你就可以让赋值操作符像 i = j = k = ... 链式使用。你也可以返回其他的东西,但它对于你的定义和如何使用你的类会有多大用处就全凭你自己了。 - Alex
4
表达式模板。 - Alan Stokes
5
@AlanStokes,如果你能详细说明一下那件事就好了,你知道的。 - Marius Bancila
有趣的问题,但你为什么要问呢?这是一个真正的实际、详细的问题吗?那就试着展示一下吧。 - Wolf
1
以下是有关编程的内容,需要翻译成中文。请返回翻译后的文字:注意:在下面的探讨中,将探讨*this未被返回的各种情况。 - M.M
2个回答

9
标准中的示例是 std::atomic。它返回分配的值。如果它返回引用,则通过它读取可能会产生不同的结果。

你知道其他的例子吗? - Wolf
2
@Wolf:Boost::Phoenix是一个用于创建惰性表达式的库。因此,operator=()会返回一些对象,您可以在其上调用operator()()来执行赋值操作。 - Bill Lynch
@BillLynch,这似乎是Alan Stokes提到的内容? - Wolf

0

如果你想要防止赋值链。

有时候,防止这样的表达式很好:

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

所以你让赋值运算符返回 void。

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

对于某些类型,链接并没有意义。但是你必须根据具体情况来看待它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接