nullptr ,指针字面量

来自cppreference.com
< cpp‎ | language
 
 
 
表达式
概述
值类别(左值 lvalue、右值 rvalue、亡值 xvalue)
求值顺序(序列点)
常量表达式
潜在求值表达式
初等表达式
lambda 表达式(C++11)
字面量
整数字面量
浮点字面量
布尔字面量
字符字面量,包含转义序列
字符串字面量
空指针字面量(C++11)
用户定义字面量(C++11)
运算符
赋值运算符a=ba+=ba-=ba*=ba/=ba%=ba&=ba|=ba^=ba<<=ba>>=b
自增与自减++a--aa++a--
算术运算符+a-aa+ba-ba*ba/ba%b~aa&ba|ba^ba<<ba>>b
逻辑运算符a||ba&&b!a
比较运算符a==ba!=ba<ba>ba<=ba>=ba<=>b(C++20)
成员访问运算符a[b]*a&aa->ba.ba->*ba.*b
其他运算符a(...)a,ba?b:c
new 表达式
delete 表达式
throw 表达式
alignof
sizeof
sizeof...(C++11)
typeid
noexcept(C++11)
折叠表达式(C++17)
运算符的代用表示
优先级和结合性
运算符重载
默认比较(C++20)
类型转换
隐式转换
一般算术转换
const_cast
static_cast
reinterpret_cast
dynamic_cast
显式转换 (T)a, T(a)
用户定义转换
 

语法

nullptr (C++11 起)

解释

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

示例

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

#include <cstddef>
#include <iostream>
 
template<class T>
constexpr T clone(const T& t)
{
    return t;
}
 
void g(int*)
{
    std::cout << "函数 g 已调用\n";
}
 
int main()
{
    g(nullptr);        // 良好
    g(NULL);           // 良好
    g(0);              // 良好
 
    g(clone(nullptr)); // 良好
//  g(clone(NULL));    // 错误:非字面量的零不能为空指针常量
//  g(clone(0));       // 错误:非字面量的零不能为空指针常量
}

输出:

函数 g 已调用
函数 g 已调用
函数 g 已调用
函数 g 已调用

关键词

nullptr

引用

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

参阅

实现定义的空指针常量
(宏常量)
(C++11)
空指针字面量 nullptr 的类型
(typedef)