if( (A) && (B) )
{
//do something
}
else
//do something else
Run Code Online (Sandbox Code Playgroud)
问题是,如果A为FALSE,该语句是否会立即中断.B会被评估吗?
我问这个情况,当数组实际上是空的并且元素为零时,B检查数组索引的有效性就说数组[0].因此我们尝试访问超出数组范围的内容,因此抛出了一个段错误.特别
if( (array.GetElements() > 0) && (array[0]))
array[0]->doSomething();
else
//do nothing and return
Run Code Online (Sandbox Code Playgroud)
如果array [0]实际得到了评估,这可能会很危险,因为它会在没有第一次检查的情况下在"&&"的左侧进行段错误.优先级告诉我,左侧肯定会优先,但它并没有告诉我,如果左边是假,它将不会评估右侧.
Joh*_*kin 46
在C和C++中,&&和||运算符"短路".这意味着他们只在需要时评估参数.如果第一个参数to &&为false,或者第一个参数||为true,则不会评估其余参数.
您发布的代码是安全的,但我质疑您为什么要包含空else块.