【发布时间】:2016-06-20 03:10:02
【问题描述】:
我正在阅读这个问题:
In c++11, does dynamic_cast return nullptr or 0?
我了解到 dynamic_cast 的结果可以是特定类型的空值:
考虑一个变量 char * ptr。它的类型(不出所料)是 char *。 但是 nullptr 的类型是特殊类型 nullptr_t。所以当我们 写ptr = nullptr之类的东西,一定会发生一些技术性的事情
nullptr 必须隐式转换为 char *。这个结果 转换设置为 ptr 的新值。 char * 的空值 是将 nullptr 转换为 char * 的结果。从概念上讲,它是 仍然是 nullptr,但类型不同(char *)。这个空值是 不同于 int * 或 string * 或任何其他指针的空值 类型。我们倾向于将这些 null 值视为 nullptr(或 0), 但每一个都是来自不同类型的不同值。 (由 方式,使用 ==) 进行比较时会发生相同的转换。
那么有哪些不同的空指针类型呢?真的有关系吗 ?在任何检查中(我们想确定某些内容是否为空)是否足以简单地检查 if == to std::nullptr ?
【问题讨论】:
-
So what are the different null pointer types ?没有多大意义,因为(正如你的报价告诉你的那样)它是任何指针类型。所有指针类型都有空值。 -
simply check if == to std::nullptr除非我遗漏了什么,否则 C++ 中的类型不能与==直接比较。char*或int*永远不会与 nullptr_t 相同 -
nullptr是一个关键字,所以它不在std命名空间中。只有它的类型std::nullptr_t在命名空间中。