我知道在c++ 0x或NULL在基于指针的应用程序中被nullptr取代。我只是好奇他们为什么要做这个替换?

在什么情况下,使用nullptr对NULL有利时处理指针?


一个原因是:字面量0有获得int类型的坏倾向,例如在完全参数转发中或更一般地作为模板类型的参数。

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


以下是Bjarne Stroustrup的原话,

In C++, the definition of NULL is 0, so there is only an aesthetic difference. I prefer to avoid macros, so I use 0. Another problem with NULL is that people sometimes mistakenly believe that it is different from 0 and/or not an integer. In pre-standard code, NULL was/is sometimes defined to something unsuitable and therefore had/has to be avoided. That's less common these days. If you have to name the null pointer, call it nullptr; that's what it's called in C++11. Then, "nullptr" will be a keyword.


你可以找到一个很好的解释,为什么它被替换为一个空指针的名字:nullptr,引用论文:

这个问题可以分为以下几类: 改进对库构建的支持,为用户提供一种方法来编写更少的模糊代码,这样随着时间的推移,库编写者将不需要担心整型和指针类型的重载。 通过更容易明确地表示整数0和nullptr,改进对泛型编程的支持。 让c++更容易教和学。


Nullptr类型为std::nullptr_t。它可以隐式转换为任何指针类型。因此,它将匹配std::nullptr_t或重载解析中的指针类型,但不匹配其他类型,如int。

0(又名。C的NULL桥接到c++)可能会导致重载函数解析的模糊性,其中包括:

f(int);
f(foo *);

(感谢Caleth在评论中指出这一点。)