运算优先级问题

int i = f1() * f2();//f1()和f2()肯定会在乘号之前执行,可是我们并不知道先执行的是哪个

cout<<i<<i++;//此时,并不知道先执行i++和是i 即称该表达式的行为是不可预知的

只有四种运算符明确规定了运算对象的求值顺序 && || ?: 和 , (先左后右)

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

int i = f() + f1() * f2();//
  • 优先级规定:f1()和f2()的返回值的乘积
  • 结合律规定:上述乘积与f()的结果相加
  • 而其中函数的调用顺序并没有规定
    因此,如果这些函数影响同一对象,则它是一条错误的表达式,将产生未定义的结果
    所以:拿不准的优先级最好用强制使用括号
    如果改变了某个运算对象的值,在表达式的其他地方不要再使用这个运算对象

一元运算符的优先级最高,接下来是乘除,最后是加减
解引用优先级别小于自增运算:(*p)++ *p++
解引用优先级别小于点运算 *p.size()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值