【发布时间】:2010-11-19 22:01:52
【问题描述】:
我们现在拥有具有许多新功能的 C++11。一个有趣且令人困惑的(至少对我而言)是新的nullptr。
好吧,不再需要讨厌的宏 NULL。
int* x = nullptr;
myclass* obj = nullptr;
不过,我不明白nullptr 的工作原理。例如,Wikipedia article 说:
C++11 通过引入一个新的关键字 来纠正这个问题,作为一个可区分的空指针常量:nullptr。它是 type nullptr_t,它可以隐式转换并且与任何指针类型或指向成员的指针类型相当。它不能隐式转换或与整数类型相比较,除了 bool。
它是一个关键字和一个类型的实例?
另外,你有没有另一个例子(除了维基百科)nullptr 优于旧的0?
【问题讨论】:
-
相关事实:
nullptr也用于表示 C++/CLI 中托管句柄的空引用。 -
nullptr_t是否保证只有一个成员nullptr?那么,如果一个函数返回nullptr_t,那么编译器就已经知道将返回哪个值,而不管函数体是什么? -
@AaronMcDaid
std::nullptr_t可以被实例化,但所有实例都将与nullptr相同,因为类型被定义为typedef decltype(nullptr) nullptr_t。我相信该类型存在的主要原因是,如果有必要,可以专门重载函数以捕获nullptr。有关示例,请参见 here。 -
0 从来都不是空指针,空指针是一个可以通过 casting 零文字到指针类型的指针,它不指向 any 现有对象的定义。
-
@Nils 重点是表达意图!
标签: c++ pointers c++11 nullptr