在C++中nullptr和nullptr_t有什么区别?

Moi*_*jid 8 c++ nullptr c++11

我应该使用哪一个?如果我使用一个而不是另一个优势?

Que*_*tin 20

nullptr是常数,nullptr_t是它的类型.在需要分别使用空指针或空指针类型的上下文中使用每一个.


πάν*_*ῥεῖ 6

“……如果我用一个代替另一个?”

你不能(在另一个上使用一个)它们通过这些方式是正交的:

nullptr_t是用来表示一个的类型nullptr

nullptr(1)有效的类型常量nullptr_t,表示特定的编译器实现定义的值。

请参阅C++11 标准部分:

2.14.7 指针字面量

  1. 指针文字是关键字nullptr。它是一个类型的纯右值std::nullptr_t
    [ 注意:std::nullptr_t 是一个不同的类型,既不是指针类型也不是成员类型的指针;相反,这种类型的纯右值是空指针常量,可以转换为空指针值或空成员指针值。见 4.10 和 4.11。— 尾注 ]

1)就像this关键字nullptr代表右值而不是const类型一样。因此,decltype(nullptr)可以是非const类型。对于 Visual C++ 2015 和 MinGW g++ 5.1,它是非const.


Sam*_*tep 5

nullptr属于 类型nullptr_t


小智 5

在正是以同样的方式true是类型的C ++关键字文字boolnullptr是一个C ++关键字类型的文字std::nullptr_t