我知道在 C++ 中0x
或者在基于指针的应用程序中NULL
被替换。nullptr
我只是好奇他们为什么要进行这个替换的确切原因?
在处理指针时,在什么情况下使用nullptr
过度有益?NULL
nullptr
有类型std::nullptr_t
。它可以隐式转换为任何指针类型。因此,它将匹配std::nullptr_t
重载决议中的或指针类型,但不匹配其他类型,例如int
.
0
(又名。C 的 NULL 桥接到 C++ 中)可能会导致重载函数解析中的歧义,其中包括:
f(int);
f(foo *);
(感谢 Caleth 在评论中指出这一点。)
您可以通过阅读空指针的名称: nullptr来找到为什么它被替换的一个很好的解释,以引用该论文:
这个问题分为以下几类:
改进对库构建的支持,为用户提供一种编写不那么模棱两可的代码的方法,以便库编写者随着时间的推移不必担心整数和指针类型的重载。
通过更容易明确地表达整数 0 和 nullptr 来改进对泛型编程的支持。
使 C++ 更易于教授和学习。
在 C++ 中,NULL 的定义是 0,所以只有审美上的区别。我更喜欢避免使用宏,所以我使用 0。NULL 的另一个问题是人们有时会错误地认为它不同于 0 和/或不是整数。在准标准代码中,NULL 有时被/被定义为不合适的东西,因此必须/必须避免。这几天不太常见了。
如果必须给空指针命名,就叫它nullptr;这就是它在 C++11 中的名称。然后,“nullptr”将成为关键字。
一个原因:文字0
具有获取类型的不良倾向int
,例如在完美的参数转发中或更一般地作为具有模板类型的参数。
另一个原因:代码的可读性和清晰度。