NULL ==指针

min*_*ain 5 c++ c++11

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

if(NULL == ptr)
Run Code Online (Sandbox Code Playgroud)

代替:

if(ptr == NULL)
Run Code Online (Sandbox Code Playgroud)

我想知道为什么?

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

Yu *_*Hao 12

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

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

另请注意:

  1. if(ptr == NULL)是一样的if(!ptr).
  2. C++ 11引入nullptr替换使用NULL.因此,要初始化空指针,首选使用ptr = nullptr

关于为什么要使用nullptrNULL:

在C++ 11之前,NULL通常在内部实​​现#define NULL 0,但问题是,0也是整数零.在某些情况下可能会造成麻烦.例如:

void func(int n);   
void func(char *s);

func(NULL);   //call which function?
Run Code Online (Sandbox Code Playgroud)

虽然auther暗示这NULL是一个指针类型,但编译器只知道调用func(0).所以第一个版本将被调用.

使用时func(nullptr),编译器会知道它是一个指针并调用第二个版本.