第四章_表达式_4.1 基础

4.1 基础

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

4.1.1 基本概念

作用于一个运算对象的运算符是一元运算符(unary operator);作用于两个运算对象的运算符是二元运算符(binary operator)

组合运算符和运算对象

对于含有多个运算符的复杂表达式来说,理解表达式的含义首先要理解运算符的优先级(precedence)、结合律(associativity)以及运算对象的求值顺序(order of evaluation)。

运算对象转换

在表达式求值过程中,运算对象常常会进行类型转换。

重载运算符

当运算符作用域类类型的运算对象时,用户可以自定义其含义。事实上是为已存在的运算符赋予了另外一层含义,称之为重载运算符(overloaded operator)。

左值(lvalue)和右值(rvalue)

当一个对象被用作右值的时候,用的是对象的值(内容);

当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。

一个重要的原则:在需要右值的地方可以用左值来替代,但是不能把右值当成左值(也就是位置)使用。当一个左值被当成右值使用时,实际使用的是它的内容(值 )。

4.1.2 优先级与结合律

优先级与结合律决定了表达式中每个运算符对应的运算对象来自表达式的那一部分。

高优先级运算符的运算对象要比低优先级运算符的运算对象更紧密地组合在一起。如果优先级相同,则其组合规则由结合律确定。

括号无视优先级与结合律

括号无视普通的组合规则,表达式中括号括起来的部分被当做一个单元来求值,然后再与其他部分一起按照优先级组合。

优先级与结合律有何影响

优先级会影响程序的正确性。

4.1.3 求值顺序

优先级规定了运算对象的组合方式,但是没有说明运算对象按照说明顺序求值,在大多数情况下,不会明确指定求值的顺序。

对于没有指定执行顺序的运算符来说,如果表达式指向并修改了同一对象,将会引发错误并产生未定义行为。

有 4 种运算符明确规定了运算对象的求值顺序:逻辑与&&、逻辑或||、条件运算符?:、逗号,运算符。

求值顺序、优先级、结合律

运算对象的求值顺序与优先级和结合律无关。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值