

新闻资讯
技术学院C++11引入nullptr替代NULL以解决类型安全问题。1. NULL是整型常量0,易在函数重载时引发歧义;2. nullptr是专用空指针类型std::nullptr_t,只匹配指针参数;3. 使用func(nullptr)可准确调用指针版本函数;4. 现代C++推荐统一使用nullptr,避免NULL或0表示空指针,确保类型推导正确,提升代码可靠性。
在C++中,表示空指针的方式经历了从 NULL 到 nullptr 的演变。特别是在C++11引入 nullptr 后,它逐渐成为推荐的空指针表示方式。下面详细说明它们的区别和使用场景。
#define NULL 0
例如:
int* p = nullptr; // 正确char* q = nullptr; // 正确int i = nullptr; // 编译错误!不能赋值给整数
例子:函数重载中的歧义
假设有以下两个重载函数:
void func(int);void func(char*);
如果调用:
func(NULL
);
func(int),这可能不是你想要的结果——你本意可能是传一个空指针。而使用:
func(nullptr);
func(char*),因为 nullptr 只能匹配指针类型,消除了歧义。基本上就这些。nullptr 的引入解决了长期存在的空指针类型不安全问题,让代码更清晰、更可靠。虽然 NULL 在旧代码中仍常见,但新项目应统一使用 nullptr。不复杂但容易忽略。