我正在从事一个项目,我一直在寻找这样的行:
if(pointer && pointer->whatever) {...}
可以肯定地假设if
将以与源代码中所述相同的顺序进行比较?或者可能会在对 pointer
进行null之前(或同时)对pointer->wathever
进行评估?
是的,这是一个安全的语句。有条件的&&
和||
以c。
如果pointer
是NULL
,则pointer->whatever
将执行不是。
if(pointer && pointer->whatever)
就像写作:
if(pointer) {
if(pointer->whateve) {
}
}
所以,是的。阅读有关短路评估的信息。
&&
操作员的评估顺序(对于C和C )是从左到右的。因此,在以下任何语句之前,将始终对指针进行测试。如果对指针进行了错误的评估(短路),则不会评估以下任何语句。
逻辑表达式将从Left-to-right
评估,一旦结果变得确定,它就会停止评估其他表达式。因此,如果表达式pointer
如果false
,则不会评估pointer->whatever
。因此,像您一样使用它是一个像样的使用。