[英]What are the different nullptr types?
我在读这个问题:
在C ++ 11中,dynamic_cast是否返回nullptr或0?
我了解到dynamic_cast的结果可以是该特定类型的null值:
考虑一个变量char * ptr。 它的类型是(毫无疑问)char *。 但是nullptr的类型是特殊类型的nullptr_t。 因此,当我们编写类似ptr = nullptr的内容时,必须发生一些技术问题
nullptr必须隐式转换为char *。 转换的结果设置为ptr的新值。 char *的空值是将nullptr转换为char *的结果。 从概念上讲,它仍然是nullptr,但是具有不同的类型(char *)。 此null值不同于int *或string *或任何其他指针类型的null值。 我们倾向于将这些null值视为nullptr(或0),但每个值实际上都是与不同类型不同的值。 (顺便说一下,使用==进行比较时会发生相同的转换)。
那么什么是空指针类型呢? 真的有关系吗 ? 在任何检查(我们要确定某项是否为空)中仅检查==到std :: nullptr是否足够?
没有不同的nullptr
类型。 nullptr
是std::nullptr_t
类型的值。 有不同的指针类型,并且任何指针类型都可以具有null值,与nullptr
相比,其结果为true
。 指针类型的数量是无限的。 由于您可以形成指向任何类型的指针,因此结果本身就是可以形成指向的类型的指针。 (即,您可以拥有int*************************
)
在任何检查(我们要确定某项是否为空)中仅检查==到std :: nullptr是否足够?
不是std::nullptr
,只是nullptr
。 但是否则,是的。
那么什么是空指针类型呢?
只有一种空指针类型, nullptr_t
。
真的有关系吗?
因为只有一种类型的空指针,所以这个问题没有意义。
在任何检查(我们要确定某项是否为空)中仅检查==到
std::nullptr
是否足够?
没有什么像std::nullptr
。 nullptr
是一个关键字。 它是std::nullptr_t
类型的prvalue 。
是的,任何指针都可以与nullptr
进行比较。
有一个类型std::nullptr_t
。 它不是指针类型。 尽管如此,我们nullptr
这种类型的实例(例如nullptr
)称为“空指针常量”。
对于每种类型T
, T*
是一个不同的指针类型,并且存在这种类型的空指针。
从nullptr_t
到任何指针类型都有适当的转换,允许我们在需要空指针常量时使用nullptr
。 例如
int *ptr = nullptr; // initialize to be the null pointer of type int*
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.