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

时间:2015-06-24 20:16:58

标签: c++ c++11 nullptr

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

7 个答案:

答案 0 :(得分:19)

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

答案 1 :(得分:4)

truebool类型的C ++关键字字面的方式完全相同,nullptrstd::nullptr_t类型的C ++关键字字面值。

答案 2 :(得分:3)

nullptr的类型为nullptr_t

答案 3 :(得分:3)

  

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

你不能(使用其中一个)他们通过以下方式正交:

nullptr_t是用于表示nullptr

类型

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

请参阅C++11 standards部分:

  

2.14.7指针文字

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

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

答案 4 :(得分:2)

nullptrstd::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。