跳到主要内容

nullptr,指针字面量 (自 C++11 起)

语法

nullptr
 (自 C++11 起)

解释

关键字 nullptr 表示指针字面量。它是类型 std::nullptr_t 的一个 prvalue。从 nullptr 到任何指针类型或任何指向成员类型指针的空指针值存在隐式转换。任何空指针常量也存在类似的转换,其中包括类型为 std::nullptr_t 的值以及宏 NULL

关键字

nullptr

示例

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

#include <cstddef>
#include <iostream>

template<class T>
constexpr T clone(const T& t)
{
return t;
}

void g(int*)
{
std::cout << "Function g called\n";
}

int main()
{
g(nullptr); // Fine
g(NULL); // Fine
g(0); // Fine

g(clone(nullptr)); // Fine
// g(clone(NULL)); // ERROR: non-literal zero cannot be a null pointer constant
// g(clone(0)); // ERROR: non-literal zero cannot be a null pointer constant
}
结果
Function g called
Function g called
Function g called
Function g called

参考文献

  • C++23 标准 (ISO/IEC 14882:2023)
    • 7.3.12 指针转换 [conv.ptr]
  • C++20 标准 (ISO/IEC 14882:2020)
    • 7.3.12 指针转换 [conv.ptr]
  • C++17 标准 (ISO/IEC 14882:2017)
    • 7.11 指针转换 [conv.ptr]
  • C++14 标准 (ISO/IEC 14882:2014)
    • 4.10 指针转换 [conv.ptr]
  • C++11 标准 (ISO/IEC 14882:2011)
    • 4.10 指针转换 [conv.ptr]

nullptr,指针字面量 (自 C++11 起)

语法

nullptr
 (自 C++11 起)

解释

关键字 nullptr 表示指针字面量。它是类型 std::nullptr_t 的一个 prvalue。从 nullptr 到任何指针类型或任何指向成员类型指针的空指针值存在隐式转换。任何空指针常量也存在类似的转换,其中包括类型为 std::nullptr_t 的值以及宏 NULL

关键字

nullptr

示例

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

#include <cstddef>
#include <iostream>

template<class T>
constexpr T clone(const T& t)
{
return t;
}

void g(int*)
{
std::cout << "Function g called\n";
}

int main()
{
g(nullptr); // Fine
g(NULL); // Fine
g(0); // Fine

g(clone(nullptr)); // Fine
// g(clone(NULL)); // ERROR: non-literal zero cannot be a null pointer constant
// g(clone(0)); // ERROR: non-literal zero cannot be a null pointer constant
}
结果
Function g called
Function g called
Function g called
Function g called

参考文献

  • C++23 标准 (ISO/IEC 14882:2023)
    • 7.3.12 指针转换 [conv.ptr]
  • C++20 标准 (ISO/IEC 14882:2020)
    • 7.3.12 指针转换 [conv.ptr]
  • C++17 标准 (ISO/IEC 14882:2017)
    • 7.11 指针转换 [conv.ptr]
  • C++14 标准 (ISO/IEC 14882:2014)
    • 4.10 指针转换 [conv.ptr]
  • C++11 标准 (ISO/IEC 14882:2011)
    • 4.10 指针转换 [conv.ptr]