简介
赋值操作符的左操作数必须是非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、赋值操作符具有右结合性
- 与其他二元操作符不同的是,赋值操作符具有右结合性,当表达式有多个赋值操作符时,从右向左结合
- 在多个赋值操作中,各个对象必须具有相同的数据类型或者可以相互转换(2.1节)为同一类型的数据类型
- 系统无法将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;