NULL vs nullptr(为什么它被替换?)

时间:2013-12-11 03:00:33

标签: c++ pointers null nullptr

我知道在基于指针的应用程序中,C ++ 0xNULLnullptr取代。我只是好奇他们为什么要替换它?

在处理指针时,使用nullptr优于NULL的情况是什么情况?

4 个答案:

答案 0 :(得分:234)

nullptr始终是指针类型。 0(也称为C的NULL桥接到C ++中)可能导致重载函数解析的模糊性,其中包括:

f(int);
f(foo *);

答案 1 :(得分:53)

你可以通过阅读A name for the null pointer: nullptr找到一个很好的解释为什么它被取代,引用这篇论文:

  

此问题分为以下几类:

     
      
  • 通过为用户提供编写较少模糊代码的方法来改进对库构建的支持,以便随着时间的推移,库编写者不必担心对整数和指针类型进行重载。

  •   
  • 通过更明确地表达整数0和nullptr来改进对泛型编程的支持。

  •   
  • 让C ++更易于教学和学习。

  •   

答案 2 :(得分:31)

这是Bjarne Stroustrup's wordings,

  

在C ++中,NULL的定义是0,因此只有美学差异。我更喜欢避免宏,所以我使用0. NULL的另一个问题是人们有时会错误地认为它与0不同和/或不是整数。在预标准代码中,NULL有时被定义为不适合的东西,因此必须/必须避免。这些日子不太常见。

     

如果必须命名空指针,则将其命名为nullptr;那是什么   它在C ++ 11中被调用。然后,“nullptr”将是一个关键字。

答案 3 :(得分:12)

一个原因:文字0很难获得类型int,例如在完美的参数转发或更多通常作为模板类型的参数。

另一个原因:代码的可读性和清晰度。