if( (A) && (B) )
{
//do something
}
else
//do something else
问题是,如果 A 为 FALSE,该语句是否会立即中断。 B甚至会被评估吗?
如果 B 检查数组索引的有效性,当数组实际上为空且元素为零时,我会问这个问题。因此抛出一个段错误,因为我们试图访问超出数组范围的东西。具体
if( (array.GetElements() > 0) && (array[0]))
array[0]->doSomething();
else
//do nothing and return
如果 array[0] 实际被评估,这可能是危险的,因为它在没有第一次检查 '&&' 左侧的情况下出现段错误。 Precedence 告诉我左侧肯定会优先,但它并没有告诉我如果左侧为 FALSE,它将不会评估右侧。
最佳答案
在 C 和 C++ 中,&&
和 ||
运算符“短路”。这意味着他们只在需要时评估一个参数。如果 &&
的第一个参数为 false,或 ||
的第一个参数为 true,则不会计算其余参数。
您发布的代码是安全的,但我质疑您为什么要包含一个空的 else
block 。
关于c++ - 如何评估 'if (A && B)' 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1331318/