C++ 11 nullptr 比 NULL 的优势比较
定义
- NULL:预处理变量,是一个宏,它的值是 0,定义在头文件 中,即 #define NULL 0。
- nullptr:C++ 11 中的关键字,是一种特殊类型的字面值,可以被转换成任意其他类型。
二者相比 nullptr 的优势
- 有类型,类型是 typdef decltype(nullptr) nullptr_t;,使用 nullptr 提高代码的健壮性。
- 函数重载:因为 NULL 本质上是 0,在函数调用过程中,若出现函数重载并且传递的实参是 NULL,可能会出现不知和哪一个函数匹配的情况;但是传递实参 nullptr 就不会出现这种情况。
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <iostream> #include <cstring> using namespace std;
void fun(char const *p) { cout << "fun(char const *p)" << endl; }
void fun(int tmp) { cout << "fun(int tmp)" << endl; }
int main() { fun(nullptr);
return 0; }
|
参考文档
https://leetcode.cn/leetbook/read/cmian-shi-tu-po/vdu9q2/