4.4 赋值运算符,4.5 递增和递减运算符

这篇博客深入探讨了C++中的赋值运算符,包括左侧运算对象的要求、初始值列表的使用以及优先级。同时,文章详细解释了复合赋值运算符和递增递减运算符的用法,特别是前置与后置版本的区别。作者强调了在条件语句中使用赋值运算时应加括号以避免混淆,并给出了在解引用和递增运算符混合使用时的注意事项。最后,提醒开发者避免不必要的后置递增运算符使用,以及注意运算对象的求值顺序问题,以防止未定义的行为。
摘要由CSDN通过智能技术生成

赋值运算符的左侧运算对象必须是一个可修改的左值

如果左侧是内置类型,初始值列表最多只能包含一个值,转换后空间不大于目标空间

无论运算对象类型是什么,初始值列表都可以为空

赋值运算满足右结合律

 int ival,jval;

 ival = jval = 0;//正确:都被赋值为0

Int ival, *pval;

Ival = pval = 0;

//错误: 0赋给pval,pval是指针不能赋给ival

赋值运算优先级较低

 

Note:因为赋值运算符的优先级低于关系运算符的优先级,所以在条件语句中,赋值部分通常应该加上括号。

 

切勿混淆相等运算符和赋值运算符(=和==)

复合赋值运算符

 

+=

-=

*=

/=

%=

算术运算符

<<=

>>=

&=

^=

|=

位运算符

 

递增运算符(++)

递减运算符(--)

 int i=0, j =0;

 j = ++I; // j=1,i=1:前置版本得到递增后的值 将对象本身作为左值返回

 j = i++;// j =1,I =2:后置版本得到递增后的值 对象原始值的副本作为右值返回、

建议:除非必要,否则不用递增递减运算符的后置版本

 

在一条语句中混用解引用和递增运算符

在复合表达式既能将变量+1,-1 又能使用它原来的值,这时候可以用后置版本

 auto pbeg = v.begin();

 while (pbeg != v.end() && *pbeg >= 0)

 cout << *pbeg++ << endl;

*pbeg++很普遍要理解

后置递增运算符的优先级高于解引用运算符

 *pbeg++等价于 * (pbeg++)

Pbeg ++ 把 pbeg加1,然后返回pbeg初始值的副本作为其求值结果

建议:简洁可以成为一种美德

 

运算对象可按任意顺序求值

如果一条 子表达式改变某个运算对象的值

另一条 子表达式又要用该值的话,运算对象的求值顺序很关键

*beg = toupper(*beg++); //错误:未定义

如果先求左侧的值

*beg = toupper(*beg);

如果先求右侧的值

*(beg +1) = toupper(*beg);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值