表达式,操作符

C++提供了丰富的操作符,并定义操作数为内置类型时,这些操作符的含义.除此之外,C++还支持操作符重载,允许程序员自定义用于类类型时操作符的含义.标准库正是使用这种功能定义用于库类型的操作符.

重点介绍C++语言定义的操作符,它们使用内置类型的操作数;还会介绍一些标准库定义的操作符.将来会学习如何定义自己的重载操作符.

表达式由一个或多个操作数(operand)通过操作符(operator)组合而成.而简单的表达式(expression)仅包括一个字面值常量或变量.较复杂的表达式则由操作符以及一个或多个操作数构成.

每个表达式都会产生一个结果(result).如果表达式中没有操作符,则其结果就是操作数本身(例如,字面值常量或变量)的值.当一个对象用在需要使用其值的地方,则计算该对象的值.例如,假设ival是一个int型对象:

if(ival)    //evaluate ival condition

//....

上述语句将ival作为if语句的条件表达式.当ival为非零值时,if条件成立,否则条件不成立.

对于含有操作符的表达式,它的值通过对操作数做指定操作获得.除了特殊用法外,表达式的结果是右值,可以读取该结果值,但是不允许对它进行赋值. 

----------------------------------------------------我是潦倒的分割线------------------------------------------------

注解:操作符的含义------该操作符执行什么操作以及操作结果的类型--------取决于操作数的类型.

-----------------------------------------------------我是潦倒的分割线-----------------------------------------------

除非已知道操作数的类型,否则无法确定一个特定表达式的含义.表达式i+j既可能是整数的加法操作、字符串的串接或者浮点数的加法操作,也完全可能是其他的操作.如何计算该表达式的值,完全取决于i和j的数据类型.

C++提供了一元操作符(unary operator)和二元操作符(binary operator)两种操作符.作用在一个操作数上的操作符称为一元操作符,如取地址操作符(&)和解引用操作符(*);而二元操作符则作用于两个操作数上,如加法操作符(+)和剑法操作符(-).除此之外,C++还提供了一个使用三个操作数的三元操作符(ternary operator).

有些符号(symbol)既可表示一元操作也可表示二元操作.例如,符号*既可以作为一元操作的解引用操作符,也可以作为二元操作的乘法操作符,这两种用法相互独立、各不相关,如果将其视为两个不同的符号可能会更容易理解些.对于这类操作符,需要根据该符号所处的上下文来确定它代表一元操作还是二元操作.

操作符对其操作数的类型有要求,如果操作符应用于内置或复合类型的操作数,则由C++语言定义其类型要求.例如,用于内置类型对象的解引用操作符要求其操作数必须是指针类型,对任何其他内置类型或复合类型对象进行解引用将导致错误的产生

对于操作数为内置或复合类型的二元操作符,通常要求它的两个操作数具有相同的数据类型,或者其类型可以转换为同一种数据类型.尽管规则可能比较复杂,但大部分的类型转换都可按预期的方式进行.例如,整型可转换为浮点类型,反之亦然,但不能将指针类型转换为浮点类型.

要理解由多个操作符组成的表达式,必须先理解操作符的优先级(precedence)、结合性(associativity)和操作数的求值顺序(order of evaluation).例如,表达式5+10*20/2,使用了加法、乘法和除法操作.该表达式的值取决于操作数与操作符如何结合.例如,乘法操作符*的操作数可以是10和20,也可以是10和20/2,或者15和20、15和20/2.结合性和优先级规则规定了操作数与操作符的结合方式.在C++语言中,该表达式的值应是105,10和20先做乘法操作,然后其结果除以2,再加5即为最后结果.

求解表达式时,仅了解操作数和操作符如何结合是不足够的,还必须清楚操作符上每一个操作数的求值顺序.每个操作符都控制了其假定的求值顺序,即,我们是否可以假定左操作数总是先于右操作数求值.大部分的操作符无法保证某种特定的求值次序.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值