1. 程式人生 > >【共讀Primer】24.<4.4> 賦值運算符 Page129

【共讀Primer】24.<4.4> 賦值運算符 Page129

編譯 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