跳转到内容

1.4 标点符号与运算符

C++ 中存在许多标点符号,例如 ;、,、{、}、(、)、[、]、.、等等。这些标点符号在程序中有着特殊的作用。它们用于分隔程序的不同部分、表示程序的结构。

需要注意的是,C++ 中存在由多个字符组成的标点符号,例如 <<、>>、::、-> 等等。这些标点符号由多个字符组成一个整体,中间是不能分隔开的。

预处理操作符是#和##。

括号用于表示程序的结构。括号都一定是成对存在的。
在 C++ 中,有三种括号标点符号:

  • ( 和 )
  • { 和 }
  • [ 和 ]

C++ 标准中并没有分隔符号和说明符号这样的分类,这一节分出来是为了帮助读者理解。这些符号往往不表示程序的操作,而是用于分隔程序的不同部分,或者用于说明程序的结构。

  • ; 分号
  • , 逗号
  • : 冒号
  • :: 两个冒号(作用域解析操作符)
  • ... 三个英文句号(包展开)

C++ 标准中并没有运算符号这样的分类,这一节分出来是为了帮助读者理解。运算符号常常用来表示程序中的运算操作。

单个字符的运算符号有:

  • ? 问号
  • . 点号
  • ~ 波浪号(按位取反)
  • ! 感叹号(逻辑非)
  • + 加号
  • - 减号
  • * 乘号
  • / 除号
  • % 百分号(取模)
  • ^ 尖角号(异或)
  • & et连写符(与)
  • | 竖线(或)
  • = 等号
  • < 小于号
  • > 大于号

多个字符的运算符号有:

  • .* 点号和星号
  • -> 箭头
  • ->* 箭头和星号
  • += 加等号
  • -= 减等号
  • *= 乘等号
  • /= 除等号
  • %= 取模等号
  • ^= 异或等号
  • &= 与等号
  • |= 或等号
  • == 等于号
  • != 不等于号
  • <= 小于等于号
  • >= 大于等于号
  • <=> 飞船/三向比较运算符
  • && 逻辑与
  • || 逻辑或
  • << 左移
  • >> 右移
  • <<= 左移等号
  • >>= 右移等号
  • ++ 自增
  • -- 自减

除了上面描述的三种括号,C++ 中还有尖括号<和>。它们实际上就是小于号和大于号,但是在某些情况下,它们会被解释成括号。
类似的,作为括号的<、>必须成对出现,不能单独出现。

举例而言,在下面的代码中

std::vector<std::optional<my_data>> v;

这里存在的就是两对尖括号。而不是两个小于号和一个右移号。

由于一些历史原因(有的键盘上会缺少一些符号),C++ 中存在一些代用符号。这包括如下:

  • %: 代替 #
  • %:%: 代替 ##
  • <: 代替 [
  • :> 代替 ]
  • <% 代替 {
  • %> 代替 }
  • and 代替 &&
  • or 代替 ||
  • xor 代替 ^
  • not 代替 !
  • bitand 代替 &
  • bitor 代替 |
  • compl 代替 ~
  • and_eq 代替 &=
  • or_eq 代替 |=
  • xor_eq 代替 ^=
  • not_eq 代替 !=

这些代用符号里面有一些看起来很像是标识符。但它们是代用符号,会被处理成标点符号,不能用作标识符。同样的,代用符号也是由多个字符组成的标点符号,中间是不能分隔开的。在C++标准中,这些代用符号同时也是关键字。