以下是声明nullptr_t
中
:
namespace std { typedef decltype(nullptr) nullptr_t; }
根据这个,std::nullptr_t
是一个未指定的基本类型的别名nullptr
是一个实例.所以实际的类型nullptr
没有名称(好吧,语言不给它起名,名称由标准库给出).
nullptr
本身就是一个关键字.但标准没有为类型引入关键字nullptr
.而是使用decltype(nullptr)
提供.
这样做的原因是什么?我觉得很困惑.您需要包含标头并指定std::
仅使用语言内置功能.
这是为了保持C++关键字的集合尽可能小吗?这是专门为nullptr
委员会或委员会宣布这样的所有新类型,所以namespace std { typedef decltype(false) bool; }
如果早些时候作出这样的决定我们会有吗?
根据初步方案nullptr
,N2431(重点煤矿):
我们提出了一个新的标准保留字
nullptr
.所述nullptr
关键字指定类型的恒定右值decltype(nullptr)
.我们还提供typedef
:typedef decltype(nullptr) nullptr_t;
nullptr_t
不是保留字.它是typedef
(如其_t
typedef
所示)decltype(nullptr)
定义的.我们不希望看到在实际程序中直接使用nullptr_t.
一般来说,委员会不愿意在语言中添加新的关键词.我谦虚地认为这是一个很好的理由,称为向后兼容性.
如果您进一步阅读该提案,您会发现主要问题不在于破坏现有代码.
想象一下,如果委员会现在然后引入一个新的关键字,会产生什么影响.所有的地狱都会破裂,C++从成功的故事开始就是一个大笑话.