Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ if语句顺序检查fr对象是否依赖于编译器?_C++_Pointers_If Statement - Fatal编程技术网

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%错误(现在是固定的)。注意:这只与内置的操作符(可能或不明显)有关。