表达式之间有什么不同:
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 }
答案 0 :(得分:7)
不同之处在于,在C ++中,在评估布尔条件时会遵循一个快捷方式。
如果是and
,您知道如果第一个语句为false,则整个输出为false。在这种情况下,根本不会评估第二个条件。同样,如果or
语句中的第一个语句的计算结果为true,则不评估第二个语句。
那么为什么这很有用,除了在评估第二个语句时节省的费用。其中一个案例是AND
,其中如果第一个表达式为false,则可能不希望对第二个表达式求值。原因是如果第一个语句为假,则第二个表达式可能定义不正确。
例如,当访问while
循环中的向量元素时,您可能会遇到检查某些情况的情况。除此之外,您还必须注意确保索引在向量的限制范围内。所以你可以写
while (i < vector.size() && condition(vector[i]))
您可以看到,如果第一部分评估为false
,那么在条件中访问vector[i]
时程序将崩溃。但是,它没有达到这一点。这只是短路运营商的众多用途之一。
答案 1 :(得分:2)
是的,由于short circuit evaluation,订单很重要。
while (cin >> a >> b and not p)
将接受输入,如果该操作成功,则它将评估p
。如果输入失败,那么我们结束循环并且永远不检查p
。另一方面:
while (not p and cin >> a >> b)
将评估p
,如果not p
为false
,那么其余条件将不会被执行。