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;