c++ - bool 表达式的顺序在 while 循环中重要吗?

标签 c++ loops while-loop

像这样的表达式有什么区别:

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/

相关文章:

c - 为什么“while(!feof(file))”总是错误的?

python - 《如何像计算机科学家一样思考》中的 While 循环

c++ - 在包含自定义类型的集合中查找

c++ - 我正在写 0 到 255 个 ascii 字符,并试图逐个字符读取它,但在第 25 个字符后无法读取

c++ - 在 Theta(n) 的范围内确定友好配对

c - 为什么以下代码片段(一个使用 "while"另一个使用 "for")有不同的行为?

java - 具有多个打印问题的硬币翻转程序

C++ 静态虚拟成员?

excel - 这条线是 VBA 中不必要的线吗?

javascript - 使用 forEach 和 .shift() 时结果不一致