标点
来自cppreference.com
这些是 C++ 中的标点符号。每个符号的含义在链接的页面中详述。
{
}
- 在 class/struct 或 union 定义中分隔成员说明。
- 在 enum 定义中分隔枚举项列表。
- 分隔复合语句。复合语句可能是下列构造的一部分
- 函数定义
- try 块或 catch 子句
- 函数 try 块
- lambda 表达式 (C++11 起)
- 在初始化中分隔初始化器。这种初始化被称为列表初始化。 (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 风格转型中分隔类型标识。
- 在声明或类型标识中指示分组。
- 在下列构造中分隔形参列表
- 函数声明符(在声明或类型标识)中
- lambda 表达式 (C++11 起)
- 用户定义推导指引 (C++17 起)
- requires 表达式 (C++20 起)
- 在直接初始化中分隔初始化器。
- 在 asm 声明中分隔字符串字面量。
- 在成员初始化器列表中分隔属于基类或成员的初始化器。
- 在
if
(包括constexpr
if
) (C++17 起)、switch
、while
、do-while
或for
(包括基于范围的for
) (C++11 起)语句中分隔控制子句。 - 在 catch 子句中分隔形参声明。
- 在仿函数宏定义中分隔宏形参。
-
defined
、__has_include
(C++17 起)、__has_cpp_attribute
(C++20 起) 预处理运算符的一部分。 - 在
static_assert
声明中分隔操作数。(C++11 起) - 在
decltype
说明符、noexcept
说明符、alignas
说明符、 条件性explicit
说明符 (C++20 起) 中分隔操作数。(C++11 起) - 在属性中分隔属性实参。(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 表达式 (C++11 起)或用户定义推导指引 (C++17 起)中形参列表的一部分,标识变参数函数.
- 在 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 起)
<<=
>>=
++
--
,
- 在
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]
参阅
替用表示 | 某些运算符的替用拼写 |