NULL == pointer

NULL == pointer

本文关键字:pointer NULL      更新时间:2023-10-16

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

if(NULL == ptr)

而不是:

if(ptr == NULL)

我想知道为什么?

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

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

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

还要注意:

  1. CCD_ 8与CCD_
  2. C++11引入了CCD_ 10,用CCD_。因此,要初始化空指针,最好使用ptr = nullptr

关于为什么使用nullptr而不是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是个坏主意。