我应该使用哪一个?如果我使用其中一个有什么优势吗?
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++ 关键字文字完全相同的方式,是truetype的 C++ 关键字文字。boolnullptrstd::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作为参数的东西。