C++ primer 笔记第五章

 5.4 赋值操作符

赋值操作符的左操作数必须是非const的左值。数组名是不可修改的左值,因此数组不可以作为赋值操作的目标。而下标和解引用操作符都返回左值。因此当将这两种操作用于非const数组时,其结果可作为赋值操作的左操作数。

5.4.1 赋值操作的右结合性

与下标和解引用操作符一样,赋值操作符也返回左值。同一,只要被赋值的每个操作数都具有相同的通用类型,c++语言允许将这多个赋值操作写在同一个表达式中。

5.4.2 赋值操作符具有低优先级

5.4.3 复合赋值操作符

复合赋值操作符的一般语法格式为:

a op=b;

其中op=可以是以下十个操作符之一:

+=,-=,*=,/=, %=  (算术操作符)

<<=,>>=,&=,^=   |=(bitwise 运算符)

每个复合赋值运算符实质上等价于,

a=a op b ;

这两种语法存在有一个显著的区别,使用复合赋值操作时,左操作数只计算了一次;而使用相似的长计算表达式时,该操作数计算了两次,第一是作为右操作数,而第二次则是作为左操作数。

5.5 自增和自减操作符

自增和自减运算都有前置和后置两种使用形式。

前置操作返回的是加1 后的值,所以返回对象本身,这是左值。而后置操作返回的是右值。

建议: 只有在必要时才使用后置操作符

前置操作需要做的工作更少,只需要加1后返回加1的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回尚未加1之前的值作为操作的结果。对于int 型对象和指针,编译器可优化掉这项额外的工作,但是对于更多的复杂迭代器类型,这种额外的工作可能会要花费更大的代价。因此,养成使用前置操作这个好习惯,就不必担心性能差异的问题。

2.在单个表达式中组合使用解引用和自增操作

下面使用一种非常通用的c++编程模式输出ivec的内容:

vector<int>::iteractor iter =ivec.begin();
while (iter !=ivec.end())
cout<<*iter++<<endl;
 

由于后自增操作的优先级高于解引用操作,因此*iter++等效于*(iter++)。

建议:简介即是美

对于上面例子中代码,不建议用

cout<<*iter<<endl;

iter++;

来代替。

 5.9 逗号操作符

逗号表达式是由一组由逗号分隔的表达式,这些表达式从左到右计算。逗号表达式的结果是其最右边表达式的值。

 5.10 复合表达式的求值

含有两个和更多个操作符的表达式成为复合表达式。在复合表达式中,操作数和操作符的结合方式决定了整个表达式的值。

5.11 new和delete表达式

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值