语法

nullptr (C++11 起)

解释

关键词 nullptr 代表指针字面量。它是 std::nullptr_t 类型的纯右值。存在从 nullptr 到任何指针类型及任何成员指针类型的隐式转换。同样的转换对于任何空指针常量也存在,空指针常量包括 std::nullptr_t 的值,以及宏 NULL

示例

演示 nullptr 保持空指针常量的含义,即使它不再是字面量。

运行此代码

  1. #include <cstddef>
  2. #include <iostream>
  3.  
  4. template<class T>
  5. constexpr T clone(const T& t)
  6. {
  7. return t;
  8. }
  9.  
  10. void g(int*)
  11. {
  12. std::cout << "Function g called\n";
  13. }
  14.  
  15. int main()
  16. {
  17. g(nullptr); // 良好
  18. g(NULL); // 良好
  19. g(0); // 良好
  20.  
  21. g(clone(nullptr)); // 良好
  22. // g(clone(NULL)); // 错误:非字面量的零不能为空指针常量
  23. // g(clone(0)); // 错误:非字面量的零不能为空指针常量
  24. }

输出:

  1. Function g called
  2. Function g called
  3. Function g called
  4. Function g called

关键词

nullptr

引用

  • C++17 standard (ISO/IEC 14882:2017):
    • 7.11 Pointer conversions [conv.ptr]
  • C++14 standard (ISO/IEC 14882:2014):
    • 4.10 Pointer conversions [conv.ptr]
  • C++11 standard (ISO/IEC 14882:2011):
    • 4.10 Pointer conversions [conv.ptr]