我应该使用哪一个?如果我使用一个而不是另一个优势?
答案 0 :(得分:19)
nullptr
是常量,nullptr_t
是它的类型。在需要分别使用空指针或空指针类型的上下文中使用每个。
答案 1 :(得分:4)
与true
是bool
类型的C ++关键字字面的方式完全相同,nullptr
是std::nullptr_t
类型的C ++关键字字面值。
答案 2 :(得分:3)
nullptr
的类型为nullptr_t
。
答案 3 :(得分:3)
" ...如果我使用一个而不是另一个?"
你不能(使用其中一个)他们通过以下方式正交:
nullptr_t
是用于表示nullptr
nullptr
(1)实际上是类型nullptr_t
的常量,表示特定的编译器实现定义值。
请参阅C++11 standards部分:
2.14.7指针文字
- 指针文字是关键字
醇>nullptr
。它是std::nullptr_t
类型的prvalue [注意:std::nullptr_t
是一种不同的类型,既不是指针类型也不是指向成员类型的指针;相反,这种类型的prvalue是一个空指针常量,可以转换为空指针值或null成员指针值。见4.10 和4.11。 - 尾注]
1)就像this
关键字nullptr
代表右值而不是const
类型。因此,decltype(nullptr)
可以是非const
类型。使用Visual C ++ 2015和MinGW g ++ 5.1,它不是const
。
功能
答案 4 :(得分:2)
nullptr
是std::nullptr_t
类型的指针文字。
而且nullptr
也是C ++的关键字,与布尔文字false和true相同。:)
答案 5 :(得分:2)
来自[lex.nullptr]:
指针文字
指针字面:
nullptr
指针文字是关键字
nullptr
。它是std::nullptr_t
类型的prvalue。 [注意:std::nullptr_t
是一种不同的类型,既不是指针类型也不是指向成员类型的指针;相反,这种类型的prvalue是 空指针常量,可以转换为空指针值或空成员指针值。见4.10 和4.11。 - 后注]
因此,当需要指针文字时使用nullptr
,当需要采用该类型时,请在上下文中使用std::nullptr_t
。例如,后者,如果您正在创建一个函数或构造函数或者可以将nullptr
作为参数的东西。
答案 6 :(得分:1)
如果你试试这个
cout << typeid(nullptr).name() << endl;
您将看到nullptr的类型为std :: nullptr_t。