布局表达式的顺序在while循环中是否重要?

Koo*_*Pad 3 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 }
Run Code Online (Sandbox Code Playgroud)

the*_*ker 7

不同之处在于,在C++中,在评估布尔条件时会遵循一个快捷方式.

如果是and,您知道如果第一个语句为false,则整个输出为false.在这种情况下,根本不会评估第二个条件.同样,如果语句中的第一个or语句的计算结果为true,则不计算第二个语句.

那么为什么这很有用,除了在评估第二个语句时节省的费用.其中一种情况是,AND如果第一个表达式为假,则可能不希望评估第二个表达式.这样做的一个原因是,如果第一个语句为假,则第二个表达式可能是错误定义的.

例如,在while循环中访问向量元素时,您可能会遇到检查某些条件的情况.除此之外,您还必须注意确保索引在向量的限制范围内.所以你可以写

while (i < vector.size() && condition(vector[i]))
Run Code Online (Sandbox Code Playgroud)

您可以看到,如果第一部分的计算结果为false,则程序在访问vector[i]条件时会崩溃.但是,它没有达到这一点.这只是短路运营商的众多用途之一.