16

我应该使用哪一个?如果我使用其中一个有什么优势吗?

4

7 回答 7

31

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

于 2015-06-24T20:18:33.600 回答
7

“......如果我使用一个而不是另一个?”

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

nullptr_t是用于表示 a的类型nullptr

nullptr(1)实际上是表示特定编译器实现定义值的类型常量。nullptr_t

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

2.14.7 指针文字

  1. 指针文字是关键字nullptr。它是类型的prvalue 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.

于 2015-06-24T20:23:23.210 回答
5

与 type 的 C++ 关键字文字完全相同的方式,是truetype的 C++ 关键字文字。boolnullptrstd::nullptr_t

于 2015-06-24T20:23:42.103 回答
4

nullptr是类型nullptr_t

于 2015-06-24T20:18:33.450 回答
2

如果你试试这个

cout << typeid(nullptr).name() << endl;

你会看到 nullptr 的类型是 std::nullptr_t。

于 2015-06-24T20:18:50.160 回答
2

nullptr是类型的指针文字std::nullptr_t。此外nullptr,它也是 C++ 的关键字,与布尔文字 false 和 true 相同。:)

于 2015-06-24T20:19:48.240 回答
2

来自 [lex.nullptr]:

指针文字

指针文字
     nullptr

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

因此nullptr,当您需要指针文字时使用,并且std::nullptr_t在需要采用该类型时在上下文中使用。后者,例如,如果您正在创建一个函数或构造函数或可以将 anullptr作为参数的东西。

于 2015-06-24T20:22:52.620 回答