Namespaces
Variants

Character sets and encodings

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

本页面描述了C++标准规定的若干字符集。

目录

翻译字符集

翻译字符集 由以下元素组成:

  • 每个在 Unicode 代码空间中分配了码点的抽象字符,以及
  • 为每个未分配给抽象字符的Unicode标量值设立的独立字符。

翻译字符集是基础字符集和基础字面量字符集(见下文)的超集。

(自 C++23 起)

基本字符集

基本字符集 由以下 96 (C++26前) 99 (C++26起) 个字符组成:

码点 字符 字形
U+0009 字符制表符
U+000B 行制表符
U+000C 换页符 (FF)
U+0020 空格
U+000A 换行符 (LF) new-line
U+0021 感叹号 !
U+0022 引号 "
U+0023 数字符号 #
U+0025 百分号 %
U+0026 与符号 &
U+0027 撇号 '
U+0028 左圆括号 (
U+0029 右圆括号 )
U+002A 星号 *
U+002B 加号 +
U+002C 逗号 ,
U+002D 连字符减号 -
U+002E 句点 .
U+002F 斜线 /
U+0030 .. U+0039 数字零 .. 九 0 1 2 3 4 5 6 7 8 9
U+003A 冒号 :
U+003B 分号 ;
U+003C 小于号 <
U+003D 等号 =
U+003E 大于号 >
U+003F 问号 ?
U+0041 .. U+005A 拉丁大写字母 A .. Z A B C D E F G H I J K L M

N O P Q R S T U V W X Y Z

U+005B 左方括号 [
U+005C 反斜线 \
U+005D 右方括号 ]
U+005E 抑扬符 ^
U+005F 下划线 _
U+0061 .. U+007A 拉丁小写字母 a .. z a b c d e f g h i j k l m

n o p q r s t u v w x y z

U+007B 左花括号 {
U+007C 竖线 |
U+007D 右花括号 }
U+007E 波浪号 ~

以下字符自 C++26 起被添加到基础字符集:

码位 字符名称 字形
U+0024 Dollar Sign $
U+0040 Commercial At @
U+0060 Grave Accent `
(since C++26)

基本字面量字符集

基本字面字符集 由基本字符集中的所有字符以及以下控制字符组成:

码点 字符
U+0000 空字符
U+0007 响铃符
U+0008 退格符
U+000D 回车符(CR)

执行字符集

执行字符集和执行宽字符集是基本字面字符集的超集。执行字符集的编码以及附加元素集合(如有)是区域设置特定的。执行宽字符集的每个元素必须能够表示为独立的 wchar_t 代码单元。

代码单元与字面值编码

一个 代码单元 是字符类型的整数值。 字符字面量 中除多字符或不可编码字符字面量之外的字符,或在 字符串字面量 中的字符,会被编码为一个或多个代码单元的序列,具体由编码前缀决定;这被称为相应的 字面量编码

字面量编码或某个执行字符集的本地化特定编码,会将基本字面量字符集的每个元素编码为具有非负值的单个代码单元,且该代码单元的值不同于其他任何此类元素的代码单元。基本字面量字符集之外的字符可通过多个代码单元进行编码;此类代码单元的值可能与基本字面量字符集元素的代码单元值相同。执行字符集的编码可能与任何字面量编码无关。

普通字面值编码是应用于普通字符或字符串字面值的编码。宽字面值编码是应用于宽字符或字符串字面值的编码。

U+0000 NULL字符被编码为值0。翻译字符集的其他元素均不以值为0的代码单元进行编码。数字0(U+0030)之后的每个十进制数字字符的代码单元值应比前一个数字的值大1。普通和宽字符字面值的编码在其他方面由实现定义。

对于 UTF-8、UTF-16 或 UTF-32 字面量,翻译字符集中每个字符对应的 UCS 标量值按照 ISO/IEC 10646 标准中相应 UCS 编码形式的规定进行编码。

注释

C++23 通过 P2314R4 修改了部分字符集的标准名称。

新名称 旧名称
basic character set basic source character set
basic literal character set basic execution character set
basic execution wide-character set

从源文件 (UTF-8源文件除外) (C++23 起) 字符到 基础字符集 (C++23 前) 翻译字符集 (C++23 起) 的映射在 翻译阶段 1 期间由实现定义,因此要求实现文档说明基础源字符在源文件中的表示方式。

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 适用范围 发布时行为 正确行为
CWG 788 C++98 执行字符集成员的值由实现定义,
但不具有本地化特性
具有本地化特性
CWG 1796 C++98 基础执行(宽)字符集中空(宽)字符的
表示形式所有位均为零
仅要求值为零

参见

ASCII 码表
C 文档 关于 字符集与编码