【共读Primer】24.[4.4] 赋值运算符 Page129

赋值运算符的左侧必须是一个可修改的值(左值的一般情况)

int i = 0, j = 0, k = 0; // 这些叫做初始化,不是赋值
const int ci = i; //依然是初始化,不是赋值

//1024 = k; // 错误:字面值是右值
//i+j = k;    // 错误:算数表达式是右值
//ci = k;    //  错误:ci是常量(不可修改)是左值

k = 0;
vector<int> vi;
vi ={0,1,2,3,4,5,6,7,8,9};  [C++11]

int ival, jval;
ival = jval = 0;

赋值运算符满足右结合律,所以可以使用连等的方式进行赋值。

赋值运算符的优先级是比较低的,所以它一般左右才被计算。

这里需要提醒一点。赋值运算符和相等逻辑运算符千万不要弄混了,因为编译器检查不出这种错误。

if(x = 1)
{
}

if(x == 1)
{
}

这两个代码在编译过程中都是正确的,但是这样写,程序员所要表达的意思应该是第二种,而不是第一种。

有一个小技巧教给大家,虽然不能完全避免这种情况,但是能避免一大部分了。

在做判断的时候将常量写在等号左侧,这样编译器就会发现这种错误

if(1 = x) //不能给常数赋值,所以这里编译错误
{
}
if(1 == x)
{
}

 

posted @ 2018-08-16 20:16  chattyku  阅读(133)  评论(0)    收藏  举报