我很惊讶今天在同事的代码中看到了一些语法.
void doSomething(bool& boolRef);
bool ok = true;
doSomething(ok = false);
Run Code Online (Sandbox Code Playgroud)
我认为这是一个错误,因为param中的赋值运算符ok = false,返回赋值的值,在本例中为false.由于doSomething期待参考,我的第一反应是"那应该不起作用",因为它看起来几乎完全相同doSomething(false);
但唉它确实有效.并且doSomething像你期望的那样重新分配工作中的引用值.
有人可以解释为什么这有效吗?
谢谢!
类的规范赋值运算符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)两行,我怀疑很多其他人也会这样做.