字面值和操作符简介
本节阅读量:字面值
如下语句:
|
|
“Hello world!” 和 “5” 是什么?它们是字面值。字面值(也称字面值常量)是源代码中的固定值。
同变量一样,字面值也有值和类型。与变量(值通过初始化和赋值设置和更改)不同,字面值的值是固定的(5总是5)。 因此字面值被称为常量。
为了理解字面值和变量的差异,看如下程序:
|
|
在第5行,将值5打印到控制台。编译器编译时,生成std::cout打印值5的代码。该值5被编译为可执行文件,可以直接使用。
在第7行,创建名为x的变量,初始值5。编译器生成将值5复制到给定x的内存位置的代码。在第8行,当我们打印x时,编译器生成std::cout获取x的内存位置(其值为5)并打印对应值的代码。
因此,两个输出语句执行相同的操作(打印值5)。但在字面值的情况下,可以直接打印值5。对于变量,需从变量表示的内存中获取值5。
这就是为什么字面值是常量,而变量可以更改。字面值直接放在可执行文件中,可执行文件本身在创建后不能更改。变量的值放在内存中,可以在可执行文件运行时更改。
关键点
字面值是直接插入到源代码中的值,直接出现在可执行代码中(除非被优化)。
对象和变量表示保存值的内存位置。这些值按需获取。
操作符
数学里,运算是涉及零个或多个输入值(称为操作数)的过程,该过程产生新的值称为输出值。待执行的操作由操作符的符号表示。
例如,2+3等于5。其中,数字2和3是操作数,符号 + 是操作符。
例如:
|
|
在程序中,字面值1和2是加号(+)操作符的操作数,产生输出值3。将输出值打印到控制台。在C++中,输出值通常称为返回值。
我们熟悉的数学中常见标准算术操作符,包括加法(+)、减法(-)、乘法(*)和除法(/)。在C++中,赋值(=)也是操作符,插入(«)、提取(»)和相等(==)也是操作符。虽然大多数操作符的名称都有符号(例如+、或==),但也有许多操作符是关键字(例如new、delete和throw)。
C++中的操作符有四种不同的操作数个数:
一元操作符作用于一个操作数。比如-操作符。例如,给定-5,操作符 - 接受文本操作数5,并翻转其符号以产生新的输出值-5。
二元操作符作用于两个操作数(称为左操作数和右操作数,左操作数出现在操作符的左侧,而右操作数显示在操作符的右侧)。比如+操作符。例如,给定3+4,操作符+取左操作数3和右操作数4,并应用数学加法来产生新的输出值7。插入(«)和提取(»)操作符是二元操作符,左侧采用std::cout或std::cin,右侧采用要输出的值或要输入的变量。
三元操作符作用于三个操作数。在C++中只有条件操作符,将在后面介绍。
零元操作符作用于零操作数。在C++中只有throw操作符,稍后也将介绍。
请注意,一些操作符具有多个含义,取决于它的使用方式。例如,操作符-有两种使用方式。以一元形式用于反转数字的符号(例如,将5转换为-5,或反之亦然),以二进制形式用于减法(例如,4-3)。
操作符链接
操作符可以链接在一起,以便操作符的输出用作另一操作符的输入。例如,2*3+4,乘法操作符优先,并将左操作数2和右操作数3转换为返回值6(作为加法操作符的左操作数)。再执行加号操作符,并将左操作数6和右操作数4转换为新值10。
在深入研究操作符主题时,将更多地讨论操作符的执行顺序。现在,只需知道算术操作符的执行顺序与它们在标准数学中的执行顺序相同:首先是圆括号,然后是指数,然后是乘法和除法,然后是加法和减法。这种排序有时缩写为PEMDAS。
返回值和副作用
C++中的大多数操作符使用它们的操作数来计算返回值。例如,-5产生返回值-5,2+3产生返回值5。有几个操作符不产生返回值(例如delete和throw)。稍后将介绍这些功能。
一些操作符具有其他行为。一个操作符(或函数),除了产生返回值之外,还有一些可观察的效果,称为有副作用。例如,当计算x=5时,赋值操作符具有将值5赋值给变量x的副作用。即使在操作符完成执行后,x的更改值也是可见的(例如,通过打印x的值)。std::cout « 5 会产生将5打印到控制台的副作用。我们可以观察到,即在std::cout « 5 完成执行后,5也已打印到控制台。
具有副作用的操作符通常用于产生对应的副作用,而不是获取操作符产生的返回值。
对于高级读者
对于为获取返回值调用的操作符(例如,操作符+或操作符*),返回值是显而易见的(例如,操作数的和或积)。
对于针对其副作用调用的操作符(例如,操作符=或操作符«),返回值并不是显而易见的。例如,x=5具有什么返回值?
操作符=和操作符«(用于将值输出到控制台时)都返回其左操作数。因此,x=5返回x,std::cout«5返回std:∶cout。目的是可以链接这些操作符。
例如,x=y=5计算为x=(y=5)。首先y=5将5赋值给y。该操作返回y,然后将y赋值给x。
std::cout « “Hello” « “world” 的计算结果为(std::cout « “Hello”)« “world”。这首先将“Hello”打印到控制台。该操作返回std::cout,然后可以使用它将“world!”打印到控制台。
