是否需要 nullptr_t 类型的对象?
Are objects of type nullptr_t ever needed?
引用C++11: (18.2/9(
nullptr_t
定义如下:namespace std { typedef decltype(nullptr) nullptr_t; }
的类型 哪个
nullptr_t
是同义词,具有 中描述的特征 3.9.1 和 4.10.[ 注意:虽然不能获取nullptr
的地址,但可以获取另一个nullptr_t
对象的地址,即左值。
我们是否需要nullptr_t
类型的对象(nullptr
除外(?
nullptr
是一个 prvalue,所以你不能获取它的地址。 (它不是一个对象。 该说明指的是这样的情况:
nullptr_t n;
然后,n
是nullptr_t
类型的普通对象,因此您可以获取其地址。 这似乎没有任何用处,但在通用代码中,此功能可能会以某种方式出现。
在这种情况下它很有用,这对我来说已经足够了:
#include <cstddef>
#include <iostream>
#include <limits>
int bonus(int){return std::numeric_limits<int>::max();}
int bonus(std::nullptr_t){return 0;}
int main()
{
std::nullptr_t bar;
std::cout << bonus(0) << "n";
std::cout << bonus(nullptr) << "n";
std::cout << bonus(bar) << "n";
}
C++是一种通用语言,如果与nullptr
关联的类型不是重载解决系统的一部分,那将很烦人。
相关文章:
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- C++ 多态模板类,模板类型对象的实例化
- 如何分配适合容纳 T 类型对象的缓冲区(可能过度对齐、可能有运算符 new 等)
- 如何构造一个 std::variant 类型对象,其自身 Templated 和构造函数转发参数
- C++:初始化指向具有不同类型对象的指针数组
- 在类 C++ 中构造的模板类型对象
- 如何将颁发者名称设置为x509_req类型对象
- 将任何数据类型/对象作为参数传递以确定其大小
- 将引用类型对象的数组从C#封送到C++
- <T> 从类型对象创建类型<T1>对象的构造函数
- C++是否有现有的方法来检查对象是否是派生类型对象
- C 模板:创建与现有对象相同的类型对象
- 链接列表中的虚函数 - 多种返回类型(对象)
- 没有适当操作员()的类型对象的呼叫
- 制作垫子类型对象的数组.输出窗口显示同一帧
- 抽象类型对象的分配
- 在std::list中就地创建自定义类型对象
- 接受泛型列表类型对象的参数
- C++-将模板类型对象强制转换为特定的数据类型
- 试图在C++中打印存储在类型对象数组中的信息