在 C++ 中,我们通常检查一个指针是否为空,我只知道我们应该使用
if(NULL == ptr)
代替:
if(ptr == NULL)
我想知道为什么?
另外,如果我们想将一个ptr初始化为null,我们应该使用ptr = NULL
orptr = 0
吗?是的,我知道在 C++ 中,我们通常使用ptr = nullptr
,我想知道为什么我们要这样做只是为了统一代码?谢谢
这是一种编码风格(名为Yoda 条件),以避免在 if 语句中写入=
,==
在 if 语句中使用赋值是有效=
的,但它通常不是你想要的。
就个人而言,我不喜欢这样使用,因为它很难阅读,并且当您=
在 if 语句中使用时,现代编译器会警告您。
另请注意:
if(ptr == NULL)
与 相同if(!ptr)
。nullptr
以替换 using NULL
. 所以要初始化一个空指针,最好使用ptr = nullptr
关于为什么使用nullptr
over NULL
:
在 C++11 之前,NULL
通常在内部实现为#define NULL 0
,但问题是,0
也是整数零。在某些情况下可能会引起麻烦。例如:
void func(int n);
void func(char *s);
func(NULL); //call which function?
虽然作者暗示这NULL
是一个指针类型,但编译器只知道调用func(0)
. 因此将调用第一个版本。
使用func(nullptr)
,编译器将知道它是一个指针并调用第二个版本。
使用 yoda 相等可以防止某些错误,例如使用单个错误=
或编译器尝试从智能指针确定整数。
已经知道
我花了两天时间追查这个错误,因为他们认为 yoda 是个坏主意。