标签:程序 ons 不能 代码 完全 技巧 primer 表达式 检查
赋值运算符的左侧必须是一个可修改的值(左值的一般情况)
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) { }
【共读Primer】24.<4.4> 赋值运算符 Page129
标签:程序 ons 不能 代码 完全 技巧 primer 表达式 检查
原文地址:https://www.cnblogs.com/ChattyKu/p/9489578.html