71、空指针 nullptr

nullptr 出现的⽬的是为了替代 NULL。

在某种意义上来说,传统 C++ 会把 NULL、 0 视为同⼀种东⻄,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直接将其定义为 0。 C++ 不允许直接将 void * 隐式转换到其他类型,但如果 NULL 被定义为 ((void*)0),那么当编译 char *ch = NULL; 时,NULL只好被定义为 0。⽽这依然会产⽣问题,将导致了 C++ 重载特性会发⽣混乱,考虑:

oid func(int);

void func(char *); 

对于这两个函数来说,如果 NULL ⼜被定义为了 0 那么 func(NULL) 这个语句将 会去调⽤ func(int),从⽽导致代码违反直观。

为了解决这个问题, C++11 引⼊了 nullptr 关键字,专⻔⽤来区分空指针、 0。 nullptr 的类型 为nullptr_t,能够隐式 的转换为任何指针或成员指针的类型,也能和他们进⾏相等或者不等的⽐较。

当需要使⽤ NULL 时候,养成直接使⽤ nullptr 的习惯。

Last updated