在C++中编写这样的代码时:
bool allTrue = true;
allTrue = allTrue && check_foo();
allTrue = allTrue && check_bar();
如果
check_bar()
返回check_foo()
,则不评估false
。这称为short-circuiting or short-circuit evaluation,是惰性评估原则的一部分。这可与复合赋值运算符
&=
一起使用吗?bool allTrue = true;
allTrue &= check_foo();
allTrue &= check_bar(); //what now?
对于逻辑
OR
,将所有&
替换为|
,将true
替换为false
。 最佳答案
从C++ 11 5.17 Assignment and compound assignment operators
:
但是,您正在混淆逻辑AND,它会短路,而按位AND则不会。
在标准中找不到文本片段&&=
,这就是您要执行的操作。这样做的原因是它实际上不存在:没有逻辑分配运算符。