C++primer 5.4 赋值操作符(2.1 类型转换)

简介

  • 赋值操作符的左操作数必须是非const的左值;

  • 与其他二元操作符不同的是,赋值操作符具有右结合性,当表达式有多个赋值操作符时,从右向左结合。

  • 在多个赋值操作中,各个对象必须具有相同的数据类型或者可以相互转换(2.1节)为同一类型的数据类型

  • 系统无法将int型指针pval的值隐式转换为ival所需的int型值

  • 赋值操作具有低优先级,所以,最好加个括号

====================================================================================

一、赋值操作符

1、赋值操作符的左操作数必须是非const的左值

int i,ival,j; //i,j,ival的值默认初始化为0
const int ci=i;//可以,const 变量ci刚定义的时候就得初始化
1024=ival;//不可以
i+j=ival;//不可以
ci=ival;//不可以,ci是const类型的,不能再被赋值
//判断下列if条件会产生什么结果

if(42=i) //错误!!
if(i=42) //合法

//前者,因为赋值表达式里面左值不能是字面值常量
//后者,合法,但是是一个永真式,赋值结果i=42,42为真。

2、赋值操作符具有右结合性

  1. 与其他二元操作符不同的是,赋值操作符具有右结合性,当表达式有多个赋值操作符时,从右向左结合
  2. 在多个赋值操作中,各个对象必须具有相同的数据类型或者可以相互转换(2.1节)为同一类型的数据类型
  3. 系统无法将int型指针pval的值隐式转换为ival所需的int型值
int ival,j;
int *pval;
j=ival=pval =0;//不可以,类型不同而且不能相互转换
string s1,s2;
s1=s2="heool";//可以
//正确写法
j=ival=0;
 pval =0;
//具体的赋值操作还有很多例子,参照2.1 节

3、赋值操作具有低优先级

if( ( a = function()) !=0 )

4、复合赋值操作符

复合赋值操作符一般语法格式: a op = b;

op有以下几种:
- +=
- -=
- *=
- /=
- %=
- <<=
- >>=
- &=
- ^=
- |=

每个复合赋值操作本质上等价于

a=a op b;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值