IF和比较顺序

时间:2014-01-22 12:05:06

标签: c++ c c++11

我正在开展一个项目,我一直在寻找像这样的行:

if(pointer && pointer->whatever) {...}

假设if将按照源代码中描述的相同顺序进行比较是否安全?或者可能发生pointer->watheverpointer对NULL检查之前(或同时)进行评估的情况?

4 个答案:

答案 0 :(得分:4)

是的,这是一个安全的声明。条件&&||short-circuit方式在C中执行。

如果pointerNULL,那么pointer->whatever 将被执行。

答案 1 :(得分:2)

&&运算符的求值顺序(对于C和C ++)从左到右。因此,指针将始终在任何后续语句之前进行测试。如果指针被评估为false(短路),则不会评估以下任何语句。

答案 2 :(得分:1)

if(pointer && pointer->whatever) 

就像写作:

if(pointer) {
   if(pointer->whateve) {

   }
} 

所以,是的。阅读有关短路评估的内容。

答案 3 :(得分:0)

逻辑表达式从Left-to-right开始计算,一旦结果变得明确,它就会停止评估其他表达式。因此,如果pointer表达式falsepointer->whatever将不会被评估。因此,像你一样使用它是非常安全的。