5

在 C++ 中,我们通常检查一个指针是否为空,我只知道我们应该使用

if(NULL == ptr)

代替:

if(ptr == NULL)

我想知道为什么?

另外,如果我们想将一个ptr初始化为null,我们应该使用ptr = NULLorptr = 0吗?是的,我知道在 C++ 中,我们通常使用ptr = nullptr,我想知道为什么我们要这样做只是为了统一代码?谢谢

4

2 回答 2

12

这是一种编码风格(名为Yoda 条件),以避免在 if 语句中写入===在 if 语句中使用赋值是有效=的,但它通常不是你想要的。

就个人而言,我不喜欢这样使用,因为它很难阅读,并且当您=在 if 语句中使用时,现代编译器会警告您。

另请注意:

  1. if(ptr == NULL)与 相同if(!ptr)
  2. 引入 C++11nullptr以替换 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),编译器将知道它是一个指针并调用第二个版本。

于 2013-07-21T12:42:39.140 回答
1

使用 yoda 相等可以防止某些错误,例如使用单个错误=或编译器尝试从智能指针确定整数。

已经知道

我花了两天时间追查这个错误,因为他们认为 yoda 是个坏主意。

于 2013-07-21T13:00:27.593 回答