1.9 - 字面量和操作符
字面量
考虑下面两条语句:
1 2 |
|
这里的 “Hello world!” 和 5 有什么共同点?它们都是字面量。 literals(也称为字面量常量)指的是被直接插入到源码中的常量。
字面量和变量都具有一个值(及其类型)。但是,字面量的值是固定的,而且不能被修改(所以成为常量),而变量的值是可以改变的,不论是通过初始化还是通过赋值。
操作符
数学中的运算指的是一个计算操作,它涉及到0个或多个输入值(称为操作数),并能够产生一个新的值(称为输出值)。这个特定的计算操作,通过某种结构(通常是一个或一对符号)来指定,这种结构称之为运算符(operator)。
例如,我们都知道 2 + 3 = 5
。在这个表达式中,2和3称之为运算符,而符号 +
则称为运算符,该运算符告诉我们此时将对两个操作数执行一个加法操作,并产生一个新的值 5。
作者注
对于符号类型的运算符,常用的术语表示方法是将运算符本身写在operator之后,其原因会随着我们深入了解运算符后变得清晰。
例如,加法运算符会写作 operator+,提取运算符则写作 operator>>.
对于数学中常用标准运算符你应当已经非常熟悉了,包括加(+
)、减(-
)、乘(*
)、除(/
)。在 C++ 中,赋值号(=
)也是一个运算符,此外还有 插入运算符<<
和提取运算符>>
。有些运算符包含多个符号,例如相等比较运算符(==
)。还有一些运算符则是以单词的形式出现的(例如:new
,delete
和throw
)。
一个运算符使用的操作数的个数,称为该运算符的元数(arity)。C++ 中的运算符具有三种不同的元数:
- 一元 运算符使用一个操作数。
-
是一个一元运算符的典型,例如,-5
。它使用一个字面量操作数5,并将其符号反转,生成一个新的输出量 -5。 - 二元 运算符使用两个操作数(左右操作数)。例如
3 + 4
,运算符+
将左操作数 3 和右操作数 4执行加法运算,输出结果 7。插入运算符(<<
) 和提取运算符(>>
)也是二元运算符。它的左侧为std::cout
或std::cin
,右侧是要输出的值或接收输入的变量。 - 三元 运算符使用三个操作数。C++ 中只有一种三元运算符,稍后我们会介绍。
注意,有些运算符在不同的使用条件下具有不同的含义。例如 -
就有两种不同的含义。它可以作为一元运算符取一个值的相反数(例如将5转换为-5,或者反过来),或者也可以作为二元运算符减号使用(例如 4 - 3
)。
运算符链
运算符可以进行链式操作,这样一来,一个运算符便可以直接使用其他运算符的输出结果。例如:2 * 3 + 4
,乘法首先执行并得到结果6,然后它就成为了加号的做操作数。接下来执行加法得到新值10。
在讲解运算符时,我们会深入探讨运算符的优先级。现在你只需要知道,它的优先级和数学中的优先级是一样的:括号优先级最高,然后是指数运算符,然后是乘除,再然后是加减。该优先级顺序常常缩写为 PEMDAS(或者展开为下面这种帮助记忆的形式:“Please Excuse My Dear Aunt Sally”)
作者注
在有些国家,PEMDAS 表述为 PEDMAS、BEDMAS、BODMAS 或 BIDMAS。