4.4 赋值运算符
赋值运算符的左侧运算对象必须是一个可修改的左值.
赋值运算的结果是它的左侧运算对象,并且是一个右值. 相应的, 结果的类型就是左侧运算对象的类型.
如果赋值运算符的左右两个运算对象类型不同, 则右侧运算对象将转换成左侧运算对象的类型.
int k;
k = 3.14159; //结果:类型是int,值是3
C++11新标准允许使用花括号括起来的初始值列表作为赋值语句右侧运算对象. 如果左侧运算对象是内置类型, 那么初始值列表最多只能包含一个值, 而且该值即使转换的话其所占空间也不应该大于目标类型的空间.
对于类类型来说, 赋值运算的细节由类本身决定.
无论左侧运算对象的类型是什么, 初始值列表都可以为空. 此时, 编译器创建一个值初始化的临时变量并将其赋给左侧运算对象.
赋值运算满足右结合律
对于多重赋值语句中的每一个对象, 它的类型或者右边对象的类型相同, 或者可由右边对象的类型转换得到.
int ival, *pval;
ival = pval = 0; //错误,不能把指针的值赋给int
string s1, s2;
s1 = s2 = "OK"; //字符串字面值"OK"转换成string对象
赋值运算优先级较低
因为赋值运算的优先级相对较低, 所以通常需要给赋值部分加上括号.
切勿混淆相等运算符和赋值运算符
复合赋值运算符
int sum = 0;
for(int val = 1; val <= 10; ++val)
sum += val; //等价于sum = sum + val