有哪些不同的nullptr类型?

时间:2016-06-20 03:10:02

标签: c++ c++11

我正在读这个问题:

In c++11, does dynamic_cast return nullptr or 0?

我了解到dynamic_cast的结果可以是该特定类型的空值:

  

考虑变量char * ptr。它的类型是(不出所料)char *。   但是nullptr的类型是特殊类型nullptr_t。所以,当我们   写一些像ptr = nullptr的东西,必须发生一些技术性的事情

     

nullptr必须隐式转换为char *。结果如此   转换设置为ptr的新值。 char *的null值   是将nullptr转换为char *的结果。从概念上讲,它是   仍然是nullptr,但使用不同的类型(char *)。这个空值是   不同于int *或string *的null值或任何其他指针   类型。我们倾向于将这些空值视为nullptr(或0),   但每一个都是不同类型的独特价值。 (通过   方式,使用==)进行相同的转换。

那么不同的空指针类型是什么?真的有关系吗 ?在任何检查中(我们想要确定某些东西是否为空)是否足以简单地检查== to std :: nullptr?

3 个答案:

答案 0 :(得分:3)

没有不同的nullptr类型。 nullptrstd::nullptr_t类型的值。有不同的指针类型,任何指针类型都可以具有空值,与nullptr进行比较时,会产生true。指针类型的数量是无限的。因为你可以形成一个指向任何类型的指针,结果本身就是一个你可以形成指针的类型。 (即你可以拥有int*************************

  

在任何检查中是否足够(我们想要确定是否有什么东西   是null)简单地检查是否==到std :: nullptr?

std::nullptr,仅nullptr。但是,不然,是的。

答案 1 :(得分:2)

  

那么什么是不同的空指针类型?

只有一个空指针类型nullptr_t

  

真的重要吗?

由于只有一种类型的空指针,这个问题没有实际意义。

  

在任何检查中(我们想要确定某些东西是否为空)是否足以简单地检查==到std::nullptr

没有像std::nullptr这样的东西。 nullptr是关键字。 它是std::nullptr_t 类型的prvalue。

是的,任何指针都可以与nullptr进行比较。

答案 2 :(得分:2)

std::nullptr_t类型。它不是指针类型。尽管如此,我们还是将这种类型的实例(例如nullptr)称为“空指针常量”。

对于每个类型TT*是一个不同的指针类型,并且有一个这种类型的空指针。

nullptr_t到任何指针类型的适当转换允许我们在需要空指针时使用nullptr。例如

int *ptr = nullptr; // initialize to be the null pointer of type int*