1.4 标点符号与运算符
C++ 中存在许多标点符号,例如 ;
、,
、{
、}
、(
、)
、[
、]
、.
、等等。这些标点符号在程序中有着特殊的作用。它们用于分隔程序的不同部分、表示程序的结构。
需要注意的是,C++ 中存在由多个字符组成的标点符号,例如 <<
、>>
、::
、->
等等。这些标点符号由多个字符组成一个整体,中间是不能分隔开的。
预处理操作符
预处理操作符是#
和##
。
括号
括号用于表示程序的结构。括号都一定是成对存在的。
在 C++ 中,有三种括号标点符号:
(
和)
{
和}
[
和]
分隔与说明符号
C++ 标准中并没有分隔符号和说明符号这样的分类,这一节分出来是为了帮助读者理解。这些符号往往不表示程序的操作,而是用于分隔程序的不同部分,或者用于说明程序的结构。
;
分号,
逗号:
冒号::
两个冒号(作用域解析操作符)...
三个英文句号(包展开)
运算符号
C++ 标准中并没有运算符号这样的分类,这一节分出来是为了帮助读者理解。运算符号常常用来表示程序中的运算操作。
单个字符的运算符号有:
?
问号.
点号~
波浪号(按位取反)!
感叹号(逻辑非)+
加号-
减号*
乘号/
除号%
百分号(取模)^
尖角号(异或)&
et连写符(与)|
竖线(或)=
等号<
小于号>
大于号
多个字符的运算符号有:
.*
点号和星号->
箭头->*
箭头和星号+=
加等号-=
减等号*=
乘等号/=
除等号%=
取模等号^=
异或等号&=
与等号|=
或等号==
等于号!=
不等于号<=
小于等于号>=
大于等于号<=>
飞船/三向比较运算符&&
逻辑与||
逻辑或<<
左移>>
右移<<=
左移等号>>=
右移等号++
自增--
自减
尖括号
除了上面描述的三种括号,C++ 中还有尖括号<
和>
。它们实际上就是小于号和大于号,但是在某些情况下,它们会被解释成括号。
类似的,作为括号的<
、>
必须成对出现,不能单独出现。
举例而言,在下面的代码中
std::vector<std::optional<my_data>> v;
这里存在的就是两对尖括号。而不是两个小于号和一个右移号。
是括号还是小于号、大于号
如何判断<
、>
是尖括号还是小于号、大于号,是与上下文相关的。在这里的std::vector
和std::optional
的定义决定了跟在后面的<
和>
是尖括号。
代用符号
由于一些历史原因(有的键盘上会缺少一些符号),C++ 中存在一些代用符号。这包括如下:
%:
代替#
%:%:
代替##
<:
代替[
:>
代替]
<%
代替{
%>
代替}
and
代替&&
or
代替||
xor
代替^
not
代替!
bitand
代替&
bitor
代替|
compl
代替~
and_eq
代替&=
or_eq
代替|=
xor_eq
代替^=
not_eq
代替!=
需要注意,这些代用符号里面有一些看起来很像是标识符。但它们是代用符号,会被处理成标点符号,不能用作标识符。同样的,代用符号也是由多个字符组成的标点符号,中间是不能分隔开的。