我应该使用哪一个?如果我使用其中一个有什么优势吗?
7 回答
nullptr
是常数,nullptr_t
是它的类型。在分别需要空指针或空指针类型的上下文中使用每一个。
“......如果我使用一个而不是另一个?”
你不能(使用一个而不是另一个)它们是通过这些方式正交的:
nullptr_t
是用于表示 a的类型nullptr
nullptr
是(1)实际上是表示特定编译器实现定义值的类型常量。nullptr_t
请参阅C++11 标准部分:
2.14.7 指针文字
- 指针文字是关键字
nullptr
。它是类型的prvaluestd::nullptr_t
。
[注意:std::nullptr_t
是一种独特的类型,既不是指针类型也不是指向成员类型的指针;相反,这种类型的纯右值是一个空指针常量,可以转换为空指针值或空成员指针值。见 4.10 和 4.11。——尾注]
1)就像this
关键字nullptr
代表右值而不是const
类型一样。因此,decltype(nullptr)
可以是非const
类型。对于 Visual C++ 2015 和 MinGW g++ 5.1,它是非const
.
与 type 的 C++ 关键字文字完全相同的方式,是true
type的 C++ 关键字文字。bool
nullptr
std::nullptr_t
nullptr
是类型nullptr_t
。
如果你试试这个
cout << typeid(nullptr).name() << endl;
你会看到 nullptr 的类型是 std::nullptr_t。
nullptr
是类型的指针文字std::nullptr_t
。此外nullptr
,它也是 C++ 的关键字,与布尔文字 false 和 true 相同。:)
来自 [lex.nullptr]:
指针文字
指针文字:
nullptr
指针文字是关键字
nullptr
。它是类型的prvaluestd::nullptr_t
。[注意:std::nullptr_t
是一种独特的类型,既不是指针类型也不是指向成员类型的指针;相反,这种类型的纯右值是一个空指针常量,可以转换为空指针值或空成员指针值。见 4.10 和 4.11。——尾注]
因此nullptr
,当您需要指针文字时使用,并且std::nullptr_t
在需要采用该类型时在上下文中使用。后者,例如,如果您正在创建一个函数或构造函数或可以将 anullptr
作为参数的东西。