Skip to content

Latest commit

 

History

History
20 lines (12 loc) · 1.02 KB

空指针常量.md

File metadata and controls

20 lines (12 loc) · 1.02 KB

Null-Pointer-Const|Language|2013-07-13

早在 1972 年,常量0就扮演着整型常量和空指针常量的双重身份。为了解决0的二义性,C 使用预处理宏NULL表示空指针,一般被定义为((void*)0)或者0。 C++ 与 C 不同,只允许 0 作为空指针常量。这样会使函数重载不好交互(interacts poorly):

void foo(char *);
void foo(int);

如果NULL定义为0foo(NULL);将会调用foo(int),这通常不是程序员所期待的行为,也违反了代码的直观性。

C++11 通过引入一个新的关键字来纠正这个问题,用来标志空指针常量: nullptr。它的类型是nullptr_t(用来隐式转换到任何指针或者成员指针(pointer-to-member)类型,不能转换成整型类型,除了 bool)。

为了向后兼容,0依旧是一个空的指针常量。

char *pc = nullptr; // ok
char *pi = nullptr; // ok
bool  b = nullptr; // ok, b is false
int i = nullptr; // error

foo(nullptr);  // call foo(char *), not foo(int);