字符字面量

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

[编辑] 语法

' c-char ' (1)
u8 ' c-char ' (2) (C++17 起)
u ' c-char ' (3) (C++11 起)
U ' c-char ' (4) (C++11 起)
L ' c-char ' (5)
' c-char-sequence ' (6)

其中

  • c-char 为下列之一
  • 来自源字符集去掉单引号( ' )、反斜杠( \ )或换行符的字符,
  • 转义序列,如转义序列中所定义
  • 通用字符名,如转义序列中所定义
  • c-char-sequence 是二或更多个 c-char
1) 窄字符字面量或通常字符字面量,例如 'a''\n''\13' 。这种字面量拥有 char 类型和等 c-char 的表示在执行字符集中的值。若 c-char 在执行字符集中不可以单字节表示,则字面量拥有 int 类型和实现定义的值。
2) UTF-8 字符字面量,例如 u8'a' 。这种字面量拥有 char 类型和 c-char 的 ISO 10646 码点值,只要码点值能以单个 UTF-8 代码单元。若 c-char 不是基本拉丁或 C0 控制 Unicode 块,则程序为病态。
3) UCS-2 字符字面量,例如 u'貓' ,但不是 u'🍌'u'\U0001f34c' )。这种字面量拥有 char16_t 类型和等于 c-char 在 Unicode 中的值,若它是基本多语言平面的一部分。若 c-char 不是基本多语言平面的一部分,则程序为病态。
4) UCS-4 字符字面量,例如 U'貓'U'🍌' 。这种字面量拥有 char32_t 类型和等于 c-char 在 Unicode 中的值。
5) 宽字符字面量,例如 L'β'L'貓' 。这种字面量拥有 wchar_t 类型和等于 c-char 在执行宽字符集中的值。若 c-char 不可以执行宽字符集表示(例如在 wchar_t 为 16 位的 Windows 上的非 BMP 值),则字面量的值是实现定义的。
6) 多字符字面量,例如 'AB' ,拥有 int 类型和实现定义值。

[编辑] 注意

许多多字符字面量的实现用字面量中每个 char 的值,以大端序初始化结果整数的相继字节,例如 '\1\2\3\4' 的值是 0x01020304

C 中,诸如 'a''\n' 的字符常量拥有类型 int ,而非 char

[编辑] 参阅

字符常量C 文档