c++ - 为什么 nullptr 是核心语言的一部分,而 nullptr_t 是 STL 的一部分?

标签 c++ c++11 nullptr

据我所知nullptr是核心语言的一部分。

引用 C++11:(18.2/9)

nullptr_t is defined as follows:

namespace std { typedef decltype(nullptr) nullptr_t; }

并在 header 中定义 <cstddef> .

最佳答案

因为它可以。 C++ 标准化过程的一个中心目标是在向语言添加内容时尽可能少地改变核心语言。

nullptr 篡改了 0 的用法来表示空指针和,呃,零。由于显而易见的原因,使用 0 导致问题,f(0) 调用 f(int) 还是 f(int*) ?于是在核心语言中加入了一个全新的字面量:nullptr。它的类型只是 decltype(nullptr) 所以 nullptr_t 被添加为一个快捷方式:

namespace std {
    using nullptr_t = decltype(nullptr);
}

关于c++ - 为什么 nullptr 是核心语言的一部分,而 nullptr_t 是 STL 的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57628496/

相关文章:

c++ - glGenTextures 有效但每次都返回相同的纹理名称

c++ - 具有基于 protected 基类方法的返回类型的函数

c++ - 我可以保证nullptr的地址始终为0吗?

c++ - 具有默认模板参数的C++类型别名和前向声明

C++静态成员,这里有点迷糊

c++ - 无法将 std::bind 与 std::promise 一起使用

c++ 是否需要在用户定义和特定于类的删除运算符中处理 nullptr。?

c++ - 使用 nullptr 有什么好处?

c++ - 为什么要检查按位与的结果是否等于其中一个值?

c++ - 如何将特定回调传递给模板函数?