在 C++ 中,我们通常检查一个指针是否为空,我只知道我们应该使用
if(NULL == ptr)
代替:
if(ptr == NULL)
我想知道为什么?
另外,如果我们想将一个ptr初始化为null,我们应该使用ptr = NULLorptr = 0吗?是的,我知道在 C++ 中,我们通常使用ptr = nullptr,我想知道为什么我们要这样做只是为了统一代码?谢谢
这是一种编码风格(名为Yoda 条件),以避免在 if 语句中写入=,==在 if 语句中使用赋值是有效=的,但它通常不是你想要的。
就个人而言,我不喜欢这样使用,因为它很难阅读,并且当您=在 if 语句中使用时,现代编译器会警告您。
另请注意:
if(ptr == NULL)与 相同if(!ptr)。nullptr以替换 using NULL. 所以要初始化一个空指针,最好使用ptr = nullptr关于为什么使用nullptrover 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 是个坏主意。