NULL ==指针

时间:2013-07-21 12:40:36

标签: c++ c++11

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

if(NULL == ptr)

而不是:

if(ptr == NULL)

我想知道为什么?

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

2 个答案:

答案 0 :(得分:12)

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

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

另请注意:

  1. if(ptr == NULL)if(!ptr)相同。
  2. C ++ 11引入nullptr以使用NULL替换。因此,要初始化空指针,最好使用ptr = nullptr
  3. 关于为什么使用nullptr而不是NULL

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

    void func(int n);   
    void func(char *s);
    
    func(NULL);   //call which function?
    

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

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

答案 1 :(得分:1)

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

众所周知

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