C++ 将";while(bool a&;bool b)";即使a被证明是假的,也要同时检查a和b?

C++ 将";while(bool a&;bool b)";即使a被证明是假的,也要同时检查a和b?,c++,boolean,boolean-operations,C++,Boolean,Boolean Operations,在某些情况下,我必须在数组/向量中循环,寻找满足包含元素值的条件的元素。过去,我会使用一个简单的for循环和一个if语句,但最近我看到了一段似乎更简单的代码。确切地说: 我以前是这样做的: for( int i = 0; i < vector.size(); i++ ) if( condition[i] ) do_stuff; 而且效果也不错 但在我看来,检查不存在的值的条件仍然不完全正确,我不确定我是否应该使用它。这样可以吗?还是应该使用其他方法 任何帮助都会很好

在某些情况下,我必须在数组/向量中循环,寻找满足包含元素值的条件的元素。过去,我会使用一个简单的
for
循环和一个
if
语句,但最近我看到了一段似乎更简单的代码。确切地说:

我以前是这样做的:

for( int i = 0; i < vector.size(); i++ )
    if( condition[i] )
       do_stuff;
而且效果也不错

但在我看来,检查不存在的值的条件仍然不完全正确,我不确定我是否应该使用它。这样可以吗?还是应该使用其他方法

任何帮助都会很好

编辑0:由于向量为空,它仍应引发错误。 0<0返回false,因此仍将检查第二个条件。

是,执行短路评估

内置运算符&&和| |执行短路求值(如果求值第一个操作数后结果已知,则不求值第二个操作数),但重载运算符的行为类似于常规函数调用,始终求值两个操作数

这意味着对于
而(i
,如果
i
true
,则不会计算
条件[i]
;如果是
false
,则将进一步评估
条件[i]
;现在您可能会看到这里有一个错误。

是,执行短路评估

内置运算符&&和| |执行短路求值(如果求值第一个操作数后结果已知,则不求值第二个操作数),但重载运算符的行为类似于常规函数调用,始终求值两个操作数

这意味着对于
而(i
,如果
i
true
,则不会计算
条件[i]
;如果是
false
,则将进一步评估
条件[i]
;现在您可能会看到这里有一个错误。

i
即使在短路评估中也是错误的,因为如果第一部分是
false
,第二部分将被检查,并且
i
将超出范围。
i
即使在短路评估中也是错误的,因为如果第一部分为
false
,则将检查第二部分,并且
i
将超出范围。
int i = 0;
while( i < vector.size() || condition[i] )
    i++;
bool a , b = false;
if( b || a )
   dostuff;