C++中的运算符和计算顺序

C++ 中的运算符和计算顺序
1.运算符和其优先级
 
优先级
运算符
结合律
 
 
 
 
 
 
 
( ) [ ] -> .
从左至右
! ~ ++ -- (类型) sizeof + - * &
从右至左
* / %
从左至右
+ -
从左至右
<< >>
从左至右
<    <=   > >=
从左至右
== !=
从左至右
&
从左至右
^
从左至右
|
从左至右
&&
从左至右
||
从右至左
?:
从右至左
= += -= *= /= %= &= ^= |= <<= >>=
从左至右
      

 

      

   在C++程序设计语言中说 ++的后增(减)量(lvalue++)的优先级大于*。前增(减)量(++lvalue)*的优先级相同。

       *p++的意思是*(p++),不是(*p)++

       这样区别来对待前增量和后增量:y=++x相当于y=(x+=1),而y=x++相当于y=(t,x+=1,t)这样的区别看起来相当不错。

2 .什么是左值?
       左值 (lvalue) 是可以被赋值的表达式。左值位于赋值语句的左侧,以其相对的右值( rvaule , 则位于赋值语句的右侧。每条赋值语句都必须有一个左值和一个右值。左值必须是内存中一个可存储的变量,而不能是一个常量。
       左值能够存储表达式的结果:++x的结果存储在x中所以它是左值。x++的结果不是放在x中的值,所以它不是左值。
       右值是不可取址的,如常量,函数返回值,类型转换结果;
       int& u(); 它返回的是左值,(a=4)=28; //a=4是左值表达式。
3 .求值顺序
       在一个表达式里,子表达式的求值顺序是没有定义的。特别的是,你不能假定表达式从左向右求值。 int x=f(3)+g(7) 没有定义 f(),g()哪个先调用。
int i=1; v[i]=i++;
结果也是没有定义的或者是v[1]=1,或者是v[2]=1。
但是有三种运算符的计算顺序是有定义的:逗号(,),逻辑与(&&),逻辑或(| |)。它们保证了左边的运算对象一定要先于右边的运算对象计算。如:b=(a=2,a++)计算后把3赋给b。&&只有在第一个运算对象为true时才算第二个。| |只有在第一个运算对象是false时才算第二个,这叫 短路求值
注意区分逗号的两种用法:
f1(v[i],i++)      两个参数;
f2( (v[i],i++) )    逗号表达式;
对于f2来说参数只有一个相当于i++。
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值