【发布时间】:2014-05-31 04:35:34
【问题描述】:
在 C++ 中编写这样的代码时:
bool allTrue = true;
allTrue = allTrue && check_foo();
allTrue = allTrue && check_bar();
如果check_foo() 返回false,则不会评估check_bar()。这称为short-circuiting or short-circuit evaluation,是惰性求值原则的一部分。
这是否适用于复合赋值运算符&=?
bool allTrue = true;
allTrue &= check_foo();
allTrue &= check_bar(); //what now?
对于逻辑OR,将所有& 替换为|,将true 替换为false。
【问题讨论】:
-
@BenjaminLindley 好的,我稍微改变了我的表述。似乎惰性评估只是意味着如果您不需要程序的某些部分,就跳过它们的评估,就像在常规的 if-else-clauses 中一样。短路更进一步,但似乎遵循相同的基本思想。
-
@Mehrdad 阅读答案后,我同意你的看法。 C++ 似乎没有任何理由没有 &&= 赋值运算符。
-
标题中是否有缺字?
-
@n.1 没有?在这种情况下,短路是动词。
-
好的,谢谢,我不知道这是动词。
标签: c++ boolean lazy-evaluation short-circuiting compound-assignment