C++ if语句顺序检查fr对象是否依赖于编译器?
快速提问。以下代码将如何执行检查顺序:C++ if语句顺序检查fr对象是否依赖于编译器?,c++,pointers,if-statement,C++,Pointers,If Statement,快速提问。以下代码将如何执行检查顺序: if ((NULL != ObjectPtr) && (ObjectPtr->isValid()) ) { } if-语句的顺序是否取决于所使用的编译器?如果ObjectPtr为NULL,该代码会崩溃吗 如果语句取决于所使用的编译器,则顺序是否取决于 没有 如果ObjectPtr为NULL,该代码会崩溃吗 没有 P>语言保证.< /P> < P> C++中, &和>代码>运算符保证为强>短路< /强>。这意味着首先检查左侧操作数,
if ((NULL != ObjectPtr) && (ObjectPtr->isValid()) )
{
}
if-语句的顺序是否取决于所使用的编译器?如果ObjectPtr
为NULL
,该代码会崩溃吗
如果语句取决于所使用的编译器,则顺序是否取决于
没有
如果ObjectPtr
为NULL
,该代码会崩溃吗
没有
<> P>语言保证.< /P> < P> C++中,<代码> &和>代码>运算符保证为<>强>短路< /强>。这意味着首先检查左侧操作数,如果为false,则不计算右侧操作数
因此,您的代码是安全的,不会通过空指针执行成员访问
类似地,|
也是短路,如果左操作数为真,则不会计算其任何右操作数
对于布尔操作数,位运算符&
和|
给出的结果与逻辑运算符&&
和|
相同,但位运算符不会短路,且其右侧操作数始终被计算(可能在左侧操作数之前)
正如Quentin在评论中提到的,用户提供的这些运算符的重载不会短路,因为它们实际上是函数调用,并且具有函数调用的求值顺序(所有参数在调用之前求值)。括号太多。与20年前的C++相关,但情况不再如此。这是一个明显的重复,出现在120 K和200K的用户。@ MeaGar:你不能因为没有找到这个问题而责怪任何人,它的标题是100%错误(现在是固定的)。注意:这只与内置的操作符(可能或不明显)有关。