标点
这些是 C++ 中的标点符号。每个符号的含义在链接的页面中详述。
{}
- 在 class/struct 或 union 定义中分隔成员说明。
- 在 enum 定义中分隔枚举项列表。
- 分隔复合语句。复合语句可能是下列构造的一部分
- 在初始化中分隔初始化器。这种初始化被称为列表初始化。(C++11 起)
- 在命名空间定义中分隔命名空间体。
- 在语言链接说明中分隔声明。
- 在 requires 表达式中分隔要求。(C++20 起)
- 在复合要求中分隔表达式。(C++20 起)
- 在导出声明中分隔声明。(C++20 起)
[]
- 下标运算符;运算符重载中
operator[]
的一部分。 - 声明或类型标识(例如在new 表达式中)中数组声明符的一部分。
- 运算符重载(分配函数)中
new[]
运算符的一部分。 - delete 表达式及运算符重载(解分配函数)中
delete[]
运算符的一部分。 - 在 lambda 表达式中分隔捕获。(C++11 起)
- 在属性说明符中分隔属性。(C++11 起)
- 在结构化绑定声明中分隔标识符列表。(C++17 起)
#
- 引入预处理指令。
- 字符串化的预处理运算符。
##
()
- 在表达式中指示分组。
- 函数调用运算符;运算符重载中
operator()
的一部分。 - 在函数风格转型中分隔表达式/初始化器。
- 在
static_cast
、const_cast
、reinterpret_cast
或dynamic_cast
中分隔表达式。 - 在
typeid
、sizeof
、sizeof...
、alignof
或noexcept
(C++11 起)表达式中分隔操作数。 - 在布置 new 表达式中分隔布置实参。
- 在 new 表达式中可选地分隔类型标识。
- 在 new 表达式中分隔初始化器。
- 在 C 风格转型中分隔类型标识。
- 在声明或类型标识中指示分组。
- 在下列构造中分隔形参列表
- 函数声明符(在声明或[类型标识](https://zh.cppreference. com/w/cpp/language/type#.E7.B1.BB.E5.9E.8B.E7.9A.84.E5.91.BD.E5.90.8D))中
- lambda 表达式(C++11 起)
- 用户定义推导指引(C++17 起)
- requires 表达式(C++20 起)
- 在直接初始化中分隔初始化器。
- 在 asm 声明中分隔字符串字面量。
- 在成员初始化器列表中分隔属于基类或成员的初始化器。
- 在
if
(包括constexpr if
)(C17 起)、switch
、while
、do-while
或for
(包括基于范围的for
)(C11 起)语句中分隔控制子句。 - 在 catch 子句中分隔形参声明。
- 在仿函数宏定义中分隔宏形参。
defined
、__has_include
(C17 起)、__has_cpp_attribute
(C20 起)预处理运算符的一部分。- 在
static_assert
声明中分隔操作数。(C++11 起) - 在
decltype
说明符、noexcept
说明符、alignas
说明符、条件性explicit
说明符(C20 起)中分隔操作数。(C11 起) - 在属性中分隔属性实参。(C++11 起)
decltype(auto)
说明符的一部分。(C++14 起)- 分隔折叠表达式。(C++17 起)
- 变参数宏定义中
__VA_OPT__
替换的一部分。(C++20 起)
;
- 指示以下构造的末尾
- 分隔for 语句的第二与第三子句。
:
- 条件运算符的一部分。
- 标签声明的一部分。
- 在类定义的类头中引入基子句。
- 成员说明中访问说明符的一部分。
- 位域成员声明中引入宽度。
- 构造函数定义中引入成员初始化器列表。
- 基于范围的 for 语句中分隔范围声明与范围初始化器。(C++11 起)
- 引入枚举基,它指定枚举的底层类型。(C++11 起)
- 在属性说明符中分隔属性 using 前缀与属性列表。(C++17 起)
- 在模块声明或模块划分的导入声明中引入模块划分名。(C++20 起)
- 私有模块片段引入器(
module:private;
)的一部分。(C++20 起)
...
- 函数声明符或 lambda 表达式(C11 起)或用户定义推导指引(C17 起)中形参列表的一部分,标识变参数函数。
- 在 catch 子句中标识万应处理。
- 在宏定义中标识变参数宏。(C++11 起)
- 指示包声明与展开。(C++11 起)
?
- 条件运算符的一部分。
::
.
.*
->
- 成员访问运算符;运算符重载中
operator->
的一部分。 - 在函数声明符或 lambda 表达式中引入尾随返回类型。(C++11 起)
- 在用户定义推导指引中引入结果类型。(C++17 起)
- 在复合要求中引入返回类型要求。(C++20 起)
->*
~
- 一元补运算符(又称逐位非运算符);运算符重载中
operator~
的一部分。 - 指名析构函数或伪析构函数的标识符的一部分。
!
- 逻辑非运算符;运算符重载中
operator!
的一部分。 - consteval
if
语句的反向变体的一部分。(C++23 起)
+
-
*
- 间接运算符;运算符重载中
operator*
的一部分。 - 乘运算符;运算符重载中
operator*
的一部分。 - 声明符中或类型标识中的指针运算符或成员指针运算符
- Lambda 捕获列表中
*this
的一部分,以按复制捕获当前对象。(C++17 起)
/
%
^
&
- 取地址运算符;运算符重载中
operator&
的一部分。 - 逐位与运算符;运算符重载中
operator&
的一部分。 - 声明符中或类型标识中的左值引用运算符。
- 在 lambda 捕获中指示按引用捕获。(C++11 起)
- 成员函数声明中的引用限定符。(C++11 起)
|
=
- 简单赋值运算符;运算符重载中
operator=
的一部分,它可能是特殊成员函数(复制赋值运算符或移动赋值运算符(C++11 起))。 - 在初始化中指示复制初始化或复制列表初始化(C++11 起)。
- 在函数声明中引入默认实参。
- 在模板形参列表中引入默认模板实参。
- 在命名空间别名定义中分隔别名与别名指代的命名空间。
- 在枚举定义中引入枚举项的值。
- 纯虚函数声明中纯说明符的一部分。
- lambda 捕获中的捕获预置符,指示按复制捕获。(C++11 起)
- 函数定义中的预置定义(
=default;
)或被删除定义(=delete;
)。(C++11 起) - 在类型别名声明中分隔别名与别名指代的类型。(C++11 起)
- 在概念定义中分隔概念名与约束表达式。(C++20 起)
+=
-=
*=
/=
%=
^=
&=
|=
==
!=
<
- 小于运算符;运算符重载中
operator<
的一部分。 - 在
static_cast
、const_cast
、reinterpret_cast
或dynamic_cast
中引入类型标识。 - 引入模板实参列表。
- 在以下构造中引入模板形参列表
- 模板声明
- 部分特化
- lambda 表达式(C++20 起)
- 模板特化声明中
template<>
的一部分。 - 指示下列构造中的头文件名
#include
指令__has_include
预处理表达式(C++17 起)import
声明(C++20 起)
>
- 大于运算符;运算符重载中
operator>
的一部分。 - 在
static_cast
、const_cast
、reinterpret_cast
或dynamic_cast
中指示类型标识的末尾。 - 指示模板实参列表的末尾。
- 在以下构造中指示模板形参列表的末尾
- 模板声明
- 部分特化
- lambda 表达式(C++20 起)
- 模板特化声明中
template<>
的一部分。 - 指示下列构造中头文件名的末尾
#include
指令__has_include
预处理表达式(C++17 起)import
声明(C++20 起)
<=
>=
<=>
(C++20 起)
- 三路比较(飞船)运算符;运算符重载中
operator<=>
的一部分。
&&
||
<<
>>
- 移位运算符;运算符重载(诸位运算符或流提取运算符)中
operator>>
的一部分。 - 在
static_cast
、const_cast
、reinterpret_cast
或dynamic_cast
、模板实参列表或模板形参列表中能被重新分析成两个>
。(C++11 起)
<<=
>>=
++
--
,
- 逗号运算符;运算符重载中
operator,
的一部分。 - 下列构造中的列表分隔符
- 在
static_assert
声明中分隔参数。(C++11 起)
引用
- C++20 标准(ISO/IEC 14882:2020):
- 5.12 Operators and punctuators [lex.operators]
- C++17 标准(ISO/IEC 14882:2017):
- 5.12 Operators and punctuators [lex.operators]
- C++14 标准(ISO/IEC 14882:2014):
- 2.13 Operators and punctuators [lex.operators]
- C++11 标准(ISO/IEC 14882:2011):
- 2.13 Operators and punctuators [lex.operators]
- C++03 标准(ISO/IEC 14882:2003):
- 2.12 Operators and punctuators [lex.operators]
- C++98 标准(ISO/IEC 14882:1998):
- 2.12 Operators and punctuators [lex.operators]