NULL vs nullptr(为什么被replace?)
我知道在C ++中0x
或NULL
被基于指针的应用程序中的nullptr
所取代。 我只是好奇他们为什么做这个replace的确切原因?
在什么情况下使用nullptr
比NULL
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的参数。
另一个原因:代码的可读性和清晰度。