&&条件的执行方向

Swa*_*and 9 c c++ if-statement

可能重复:
逻辑比较:是否保证从左到右的评估?

我被告知,对于每个C函数参数,最右边的参数将首先执行/处理,然后向左进展.右侧部分将首先执行,然后向左前进.

这适用于像&&和||这样的条件 ??

如果我正在编写C++代码,我首先检查NULL condtion然后在下一步检查我是否执行了我的操作.例如

 if( CommDevice != NULL)
   {
      if(CommDevice->isOpen == TRUE)
         { 
                //Do Something
         }

   }
Run Code Online (Sandbox Code Playgroud)

我可以转换吗 if((CommDevice != NULL) && (CommDevice->isOpen == TRUE) )

"代码从右到左执行"恐惧正在阻止我,因为如果CommDevice是NULL,我试图访问NULL的成员.它会产生异常.

Pub*_*bby 10

我被告知每个C函数都从右到左进行参数化.右侧部分将首先执行,然后向左前进.

这是100%不正确.参数评估的顺序未指定!

的顺序&&||被定义,因为它形成了一个顺序点.首先评估左边,如果没有短路,则评估右边.

if((CommDevice != NULL) && (CommDevice->isOpen == TRUE) )
Run Code Online (Sandbox Code Playgroud)

这是对的.

  • 只是多了一个细节:这取决于类型的参数,它是*可能*重载`运营商&&'和/或`运营商||` - 当你这样做,这是一个正常的函数调用,求值的顺序是不确定的.不用说,这种超载很少是一个好主意. (2认同)