(22)赋值运算符、递增和递减运算符

赋值运算符:

赋值运算符的左侧对象必须是一个可修改的左值。相应的,结果的类型就是左侧运算对象的类型。如果复制运算符的左右两个运算对象类型不同,则右侧运算对象将转换成左侧运算对象的类型。


允许使用花括号括起来的初始值列表作为赋值语句的右侧运算对象:

k = {1};
无论左侧运算对象的类型是什么,初始值列表都可以为空。此时,编译器创建一个值初始化的临时量并将其赋给左侧运算对象。


赋值运算符满足右结合律:

int i,*p;
i = p=0; // 错误:不能把指针的值赋给int

所以是从右到左依次赋值.


赋值语句经常出现在条件中,因为赋值运算的优先级相对较低,所以通常需要给赋值部分加上括号使其符合我们的原意。


复合赋值运算符,如+=

和普通赋值运算符的区别是左侧运算对象的求值次数:使用复合运算符只求值一次,使用普通的运算符则求值两次。


递增和递减运算符

递增运算符(++)和递减运算符(--):为对象加1和减1的操作。

递增和递减运算符有两种形式:前置版本和后置版本。

前置版本:首先将运算对象加1(或减1),然后将改变后的对象作为求值结果。(将对象本身作为左值返回)

后置版本:将运算对象加1(或减1),然后将运算对象改变之前的那个值的副本作为求值结果。(将对象原始值的副本作为右值返回)

如:

int i=0,j;
j=++i;   //j=1 i=1
j=i++;  //j=1 i=2

混用解引用和递增运算符:

auto  pbeg =v.begin();
while(pbeg!=v.end() && *pbeg>=0){
   cout<<*pbeg++<<endl;  //输出当前值并将pbeg向前移动一个元素
}
后置递增运算符的优先级高于解引用运算符,因此*pbeg++等价于*(pbeg++)。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值