《C++ Primer第五版》读书笔记 第四章 表达式

4.1.1 基本概念

表达式由一个或多个运算对象(operand)组成,对表达式求值将得到一个结果(result)。字面值和变量是最简单的表达式(expression),其结果就是字面值和变量的值。把一个运算符(operator)和一个或多个运算对象组合起来可以生成较复杂的表达式。

组合运算符和运算对象:
C++定义了一元运算符和二元运算符。作用于一个运算对象的运算符是一元运算符,如取地址符(&)和解引用符(**);作用于两个运算对象的运算符是二元运算符,如相等运算符(==)和乘法运算符。除此之外,还有一个作用于三个运算对象的三元运算符。函数调用也是一种特殊的运算符,它对运算对象的数量没有限制。
一些符号既能作为一元运算符也能作为二元运算符。以符号*为例,作为一元运算符时执行解引用操作,作为二元运算符时执行乘法操作。一个符号到底是一元运算符还是二元运算符由它的上下文决定。对于这类符号来说,它的两种用法互不相干,完全可以当成两个不同的符号。

运算对象转换:在表达式求值的过程中,运算对象常常由一种类型转换成另外一种类型。

重载运算符:
C++语言定义了运算符作用于内置类型和复合类型的运算对象时所执行的操作。当运算符作用于类类型的运算对象时,用户可以自行定义其含义。因为这种自定义的过程事实上是为已存在的运算符赋予了另外一层含义,所以称之为重载运算符(overloaded operator)。IO库的>>和<<运算符以及string对象、vector对象和迭代器使用的运算符都是重载的运算符。

左值和右值:
C++的表达式要不然是右值(rvalue,读作”are-value”),要不然就是左值(lvalue,读作”ell-value”)。
当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。

4.1.2 优先级与结合律

复合表达式是指含有两个或多个运算符的表达式。
表达式最终的值依赖于其子表达式的组合方式。高优先级运算符的运算对象要比低优先级运算符的运算对象更为紧密地组合在一起。如果优先级相同,则其组合规则由结合律确定。
括号无视优先级和结合律

4.1.3 求值顺序

优先级规定了运算对象的组合方式,但是没有说明运算对象按照什么顺序求值。
以下两条经验准则对书写复合表达式有益:
1.拿不准的时候最好用括号来强制让表达式的组合关系符合程序逻辑的要求。
2. 如果改变了某个运算对象的值,在表达式的其他地方不要再使用这个运算对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值