如果和比较顺序

IF and order of comparisons

本文关键字:顺序 比较 如果      更新时间:2023-10-16

我正在从事一个项目,我一直在寻找这样的行:

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

可以肯定地假设if将以与源代码中所述相同的顺序进行比较?或者可能会在对 pointer进行null之前(或同时)对pointer->wathever进行评估?

是的,这是一个安全的语句。有条件的&&||以c。

以短路方式执行

如果pointerNULL,则pointer->whatever将执行不是

if(pointer && pointer->whatever) 

就像写作:

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

所以,是的。阅读有关短路评估的信息。

&&操作员的评估顺序(对于C和C )是从左到右的。因此,在以下任何语句之前,将始终对指针进行测试。如果对指针进行了错误的评估(短路),则不会评估以下任何语句。

逻辑表达式将从Left-to-right评估,一旦结果变得确定,它就会停止评估其他表达式。因此,如果表达式pointer如果false,则不会评估pointer->whatever。因此,像您一样使用它是一个像样的使用。