我正在读这个问题:
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?
答案 0 :(得分:3)
没有不同的nullptr
类型。 nullptr
是std::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
)称为“空指针常量”。
对于每个类型T
,T*
是一个不同的指针类型,并且有一个这种类型的空指针。
从nullptr_t
到任何指针类型的适当转换允许我们在需要空指针时使用nullptr
。例如
int *ptr = nullptr; // initialize to be the null pointer of type int*