我们现在拥有具有许多新功能的 C++11。一个有趣且令人困惑的(至少对我而言)是新的nullptr.
nullptr
好吧,不再需要讨厌的宏了NULL。
NULL
int* x = nullptr; myclass* obj = nullptr;
不过,我不知道如何nullptr工作。例如,维基百科文章说:
C++11 通过引入一个新的 关键字 来作为一个可区分的空指针常量来纠正这个问题:nullptr。它的 类型为 nullptr_t ,可隐式转换并且与任何指针类型或指向成员的指针类型相当。除了 bool 之外,它不能隐式转换或与整数类型相比较。
它如何是关键字和类型的实例?
另外,你有另一个例子(除了维基百科之外)哪里nullptr比好旧的更好0吗?
0
这并不奇怪。true和都是false关键字,作为文字,它们有一个类型 ( bool)。nullptr是一个类型的 指针文字std::nullptr_t,它是一个纯右值(你不能使用它来获取它的地址&)。
true
false
bool
std::nullptr_t
&
4.10关于指针转换说类型的prvaluestd::nullptr_t是一个空指针常量,并且一个整数空指针常量可以转换为std::nullptr_t。不允许相反的方向。这允许为指针和整数重载一个函数,并传递nullptr给选择指针版本。通过NULL或0会混淆选择int版本。
4.10
int
转换nullptr_t为整数类型需要一个, 并且与转换为整数类型(映射实现定义)reinterpret_cast具有相同的语义。(void*)0Areinterpret_cast不能转换nullptr_t为任何指针类型。如果可能,请依赖隐式转换或使用static_cast.
nullptr_t
reinterpret_cast
(void*)0
static_cast
sizeof(nullptr_t)该标准要求sizeof(void*).
sizeof(nullptr_t)
sizeof(void*)