当前位置:  开发笔记 > 编程语言 > 正文

为什么nullptr_t不是关键字

如何解决《为什么nullptr_t不是关键字》经验,为你挑选了1个好方法。

以下是声明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; }如果早些时候作出这样的决定我们会有吗?



1> 101010..:

根据初步方案nullptr,N2431(重点煤矿):

我们提出了一个新的标准保留字nullptr.所述nullptr关键字指定类型的恒定右值decltype(nullptr).我们还提供typedef:typedef decltype(nullptr) nullptr_t; nullptr_t不是保留字.它是typedef(如其_t typedef所示) decltype(nullptr)定义的.我们不希望看到在实际程序中直接使用nullptr_t.

一般来说,委员会不愿意在语言中添加新的关键词.我谦虚地认为这是一个很好的理由,称为向后兼容性.

如果您进一步阅读该提案,您会发现主要问题不在于破坏现有代码.

想象一下,如果委员会现在然后引入一个新的关键字,会产生什么影响.所有的地狱都会破裂,C++从成功的故事开始就是一个大笑话.


但是添加了`nullptr`的新关键字.我确信有人已经在他们的代码中使用`nullptr`而不是使用`nullptr_t`的机会更高,因为"我们不希望看到在实际程序中直接使用nullptr_t."
@anton_rh相信委员会他们是明智的.他们必须考虑我们不了解的事情,并从中做出最好的妥协.
推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有