我知道在基于指针的应用程序中,C ++ 0x
或NULL
被nullptr
取代。我只是好奇他们为什么要替换它?
在处理指针时,使用nullptr
优于NULL
的情况是什么情况?
答案 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
,例如在完美的参数转发或更多通常作为模板类型的参数。
另一个原因:代码的可读性和清晰度。