像这样的表达式有什么区别:
int a, b;
bool p = false;
while (cin >> a >> b and not p) { // code }
// and:
int a, b;
bool p = false;
while (not p and cin >> a >> b) { // code }
最佳答案
不同之处在于,在 C++ 中,在评估 bool 条件时遵循一个快捷方式。
在 and
的情况下,您知道如果第一个语句为假,则整个输出为假。在这种情况下,根本不会评估第二个条件。同样,如果 或
语句中的第一条语句计算结果为真,则不会计算第二条语句。
那么这为什么有用,除了在评估第二个语句时节省了一点精力。其中一种情况是 AND
,如果第一个表达式为假,您可能不希望对第二个表达式求值。这样做的原因是如果第一个语句为假,则第二个表达式可能定义错误。
例如,在 while
循环中访问 vector 元素时,您可能会遇到检查某些条件的情况。除此之外,您还必须注意确保索引在 vector 的范围内。所以你可以写
while (i < vector.size() && condition(vector[i]))
您可以看到,如果第一部分的计算结果为 false
,则程序将在条件中访问 vector[i]
时崩溃。然而,它还没有达到那个地步。这只是短路运算符的众多用途之一。
关于c++ - bool 表达式的顺序在 while 循环中重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33133723/