检查指针是否为空是否安全,然后在同一if语句中取消引用它?

Ell*_*tch 10 c c++ pointers conditional-statements

如果传入空指针,以下代码是否安全?

if(ptr && *ptr == value)
{
   //do something
}
Run Code Online (Sandbox Code Playgroud)

检查的顺序是否重要?如果我改成它,它会起作用吗?

if(*ptr == value && ptr)
{
   //do something
}
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 19

前者是正确和安全的,后者则不是.

内置&&运算符具有短路语义,这意味着当且仅当第一个参数为真时才计算第二个参数.

(重载运算符不是这种情况.)