是否需要 nullptr_t 类型的对象?

Are objects of type nullptr_t ever needed?

本文关键字:类型 对象 nullptr 是否      更新时间:2023-10-16

引用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;

然后,nnullptr_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关联的类型不是重载解决系统的一部分,那将很烦人。