是否需要nullptr_t类型的对象?

emb*_*edc 6 c++ nullptr c++11

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

nullptr_t 定义如下:

namespace std { typedef decltype(nullptr) nullptr_t; }
Run Code Online (Sandbox Code Playgroud)

nullptr_t作为同义词的类型具有在3.9.1和4.10中描述的特征。[注意:虽然nullptr不能使用的地址,但是nullptr_t可以使用作为左值的另一个对象的地址。—尾注]

我们是否需要类型的对象nullptr_t(除外nullptr)?

Bat*_*eba 7

在这种情况下很有用,对我来说足够了:

#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";
}
Run Code Online (Sandbox Code Playgroud)

C ++是一种通用语言,如果与之关联的类型nullptr不是过载解析系统的一部分,这将很烦人。


L. *_* F. 6

nullptr是prvalue,因此您不能使用其地址。(这不是对象。)注释指的是这样的情况:

nullptr_t n;
Run Code Online (Sandbox Code Playgroud)

然后,n是一个普通的类型的对象,nullptr_t因此您可以获取其地址。这似乎没有什么用,但是在通用代码中,此功能可能会以某种方式出现。