【发布时间】:2019-08-23 14:42:40
【问题描述】:
据我所知,nullptr 是核心语言的一部分。
引用 C++11:(18.2/9)
nullptr_t定义如下:
namespace std { typedef decltype(nullptr) nullptr_t; }
并且在标头<cstddef>中定义。
【问题讨论】:
-
如果你愿意和
decltype(nullptr)一起生活,你不需要nullptr_t。nullptr_t不是核心概念,它是一个帮手。 -
您有时需要
nullptr_t:“如果两个或多个重载接受不同的指针类型,则std::nullptr_t的重载对于接受空指针参数是必要的。” (std::nullptr_t 的 cppreference)。 -
@Adrian 我假设您打算回复我的评论。如果是这样,我说你不需要
nullptr_t如果你愿意和decltype(nullptr)一起生活。您可以使用decltype(nullptr)代替nullptr_t。nullptr_t只是decltype(nullptr);的方便别名。你应该使用nullptr_t,我的评论是为了说明为什么nullptr_t可能不是核心语言的一部分。 -
另外,通过使
nullptr成为语言的一部分,更容易确保它按应有的方式工作,因为您可以轻松地制定特定规则。