NULL vs nullptr(为什么被replace?)

我知道在C ++中0xNULL被基于指针的应用程序中的nullptr所取代。 我只是好奇他们为什么做这个replace的确切原因?

在什么情况下使用nullptrNULL nullptr利于处理指针?

nullptr总是一个指针types。 0 (又名C的NULL桥接到C ++)可能导致重载函数parsing的歧义,其中包括:

 f(int); f(foo *); 

你可以find一个很好的解释,为什么它被replace为空指针的名称:nullptr引用文件:

这个问题分为以下几类:

  • 通过为用户编写较less含糊的代码提供一种方法来改进对图书馆构build的支持,以便随着时间的推移,库编写者将不必担心整体和指针types的重载。

  • 通过更容易明确地expression整数0和nullptr来改进对generics编程的支持。

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

这是Bjarne Stroustrup的字眼,

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

如果你必须命名空指针,则称它为nullptr; 这就是它在C ++ 11中所称的。 那么,“nullptr”将是一个关键字。

一个原因:字面0有一个不好的趋势,例如在完美的参数转发或更多的一般作为模板types的参数。

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