C++面试题更新 2026-08-05

请解释在 C++ 编程中,选择使用 nullptr 代替 NULL 的原因是什么?

技术原理方案权衡C++

考察说明

考查候选人对 C++ 类型安全与空指针常量演进的理解。

回答思路

  1. 【回答框架 1】nullptr 是 C++11 引入的关键字,具有类型 nullptr_t,可隐式转换为任意指针类型,但不能转换为整型,从而解决了 NULL 在重载解析中可能匹配到整数参数的问题。
  2. 【回答框架 2】NULL 在 C++ 中通常定义为 0 或 (void*)0,在重载函数时可能导致歧义,例如调用 f(NULL) 可能会选择 f(int) 而不是 f(char*),而 nullptr 能准确匹配指针版本。
  3. 【回答框架 3】使用 nullptr 能提高代码可读性和类型安全,因为它明确表示空指针语义,且与模板和 auto 类型推导更兼容,避免隐式转换带来的意外。
  4. 【关键点 1】nullptr 具有 nullptr_t 类型,类型安全。
  5. 【关键点 2】NULL 可能被定义为 0,导致重载解析错误。
  6. 【关键点 3】nullptr 只能转换为指针类型,不能转换为整型。
  7. 【易错点 1】不要将 nullptr 与 NULL 混用,以免造成代码不一致。
  8. 【易错点 2】在 C++03 或更早版本中不能使用 nullptr,需要编译器支持 C++11 或更高标准。