赋值运算符的返回值可以作为参考吗?

Add*_*ddy 1 c++

我很惊讶今天在同事的代码中看到了一些语法.

void doSomething(bool& boolRef);

bool ok = true;
doSomething(ok = false);
Run Code Online (Sandbox Code Playgroud)

我认为这是一个错误,因为param中的赋值运算符ok = false,返回赋值的值,在本例中为false.由于doSomething期待参考,我的第一反应是"那应该不起作用",因为它看起来几乎完全相同doSomething(false);

但唉它确实有效.并且doSomething像你期望的那样重新分配工作中的引用值.

有人可以解释为什么这有效吗?

谢谢!

Nir*_*man 6

类的规范赋值运算符Foo如下所示:

class Foo {
  ...

  Foo& operator=(const Foo& other) {
    // make this the same as other
    return *this;
  }
};
Run Code Online (Sandbox Code Playgroud)

如您所见,它确实返回了一个引用.在这种情况下,对象是ok,因此它返回一个引用ok,这是一个左值,这就是调用的工作原理.

Bool当然不是一个类,但是它的工作方式相同,这就是为什么规范赋值运算符就像这样编写.

顺便说一句,我个人并不真正关心这个问题,我可能会把它写成doSomething(ok=false)两行,我怀疑很多其他人也会这样做.