Skip to content

1.9 - 字面量和操作符

字面量

考虑下面两条语句:

1
2
std::cout << "Hello world!";
int x{ 5 };

这里的 “Hello world!” 和 5 有什么共同点?它们都是字面量。 literals(也称为字面量常量)指的是被直接插入到源码中的常量。

字面量和变量都具有一个值(及其类型)。但是,字面量的值是固定的,而且不能被修改(所以成为常量),而变量的值是可以改变的,不论是通过初始化还是通过赋值。

操作符

数学中的运算指的是一个计算操作,它涉及到0个或多个输入值(称为操作数),并能够产生一个新的值(称为输出值)。这个特定的计算操作,通过某种结构(通常是一个或一对符号)来指定,这种结构称之为运算符(operator)

例如,我们都知道 2 + 3 = 5。在这个表达式中,2和3称之为运算符,而符号 + 则称为运算符,该运算符告诉我们此时将对两个操作数执行一个加法操作,并产生一个新的值 5。

作者注

对于符号类型的运算符,常用的术语表示方法是将运算符本身写在operator之后,其原因会随着我们深入了解运算符后变得清晰。

例如,加法运算符会写作 operator+,提取运算符则写作 operator>>.

对于数学中常用标准运算符你应当已经非常熟悉了,包括加(+)、减(-)、乘(*)、除(/)。在 C++ 中,赋值号(=)也是一个运算符,此外还有 插入运算符<<和提取运算符>>。有些运算符包含多个符号,例如相等比较运算符(==)。还有一些运算符则是以单词的形式出现的(例如:newdeletethrow)。

一个运算符使用的操作数的个数,称为该运算符的元数(arity)。C++ 中的运算符具有三种不同的元数:

  • 一元 运算符使用一个操作数。-是一个一元运算符的典型,例如,-5。它使用一个字面量操作数5,并将其符号反转,生成一个新的输出量 -5。
  • 二元 运算符使用两个操作数(左右操作数)。例如 3 + 4,运算符 + 将左操作数 3 和右操作数 4执行加法运算,输出结果 7。插入运算符(<<) 和提取运算符(>>)也是二元运算符。它的左侧为 std::coutstd::cin,右侧是要输出的值或接收输入的变量。
  • 三元 运算符使用三个操作数。C++ 中只有一种三元运算符,稍后我们会介绍。

注意,有些运算符在不同的使用条件下具有不同的含义。例如 -就有两种不同的含义。它可以作为一元运算符取一个值的相反数(例如将5转换为-5,或者反过来),或者也可以作为二元运算符减号使用(例如 4 - 3)。

运算符链

运算符可以进行链式操作,这样一来,一个运算符便可以直接使用其他运算符的输出结果。例如:2 * 3 + 4,乘法首先执行并得到结果6,然后它就成为了加号的做操作数。接下来执行加法得到新值10。

在讲解运算符时,我们会深入探讨运算符的优先级。现在你只需要知道,它的优先级和数学中的优先级是一样的:括号优先级最高,然后是指数运算符,然后是乘除,再然后是加减。该优先级顺序常常缩写为 PEMDAS(或者展开为下面这种帮助记忆的形式:“Please Excuse My Dear Aunt Sally”)

作者注

在有些国家,PEMDAS 表述为 PEDMAS、BEDMAS、BODMAS 或 BIDMAS。