1. 程式人生 > 其它 >左值、右值、運算子

左值、右值、運算子

1、取地址符作用於一個左值運算物件,返回一個指向該左值運算物件的指標,這個指標是一個右值。

2、如果表示式的求值結果是左值,decltype作用於該表示式(不是變數)得到一個引用型別,例如,假設p的型別是int *,由於解引用運算子返回左值,那麼decltype(*p)得到的型別是int &。另一方面,因為取地址運算子生成右值,所以decltype(&p)的結果是int **,即結果是一個指向整型指標的指標。

3、運算物件的求值順序與優先順序和結合律無關,如表示式f() + g() * h() + j();中並沒有規定fghj四個函式哪個先求值,當四個函式沒有關聯時不會出錯,但是當它們相互有影響時,由於哪個先求值並沒有規定,因此會得到不確定的結果,此時這條語句是錯誤的。

4、算術運算子、邏輯運算子、關係運算符的運算物件和求值結果都是右值。

5、求餘運算子結果的符號與第一個運算物件符號一致,出發運算子結果的符號根據兩個運算物件的符號而定,如果兩個運算物件符號相同則結果為正,否則為負。

6、if(val)當val非0時為真,if(val == true)只有當val為1時為真。進行比較運算時,除非比較的物件是bool型別,否則不要使用布林字面值true和false作為運算物件。

7、遞增遞減運算子有前置版本和後置版本,前置版本將物件本身作為左值返回,後置版本則將物件原始值的副本作為右值返回。建議:除非必須,否則不用後置版本。

8、後置遞增運算子的優先順序高於解引用運算子,因此,*iter++的意思是先進行iter++,使iter得值加1,返回iter增加之前的原始值,再進行解引用。

9、成員訪問運算子(箭頭運算子和點運算子):箭頭運算子作用於一個指標型別的運算物件,結果是一個左值,點運算子分兩種情況:如果成員所屬的物件是左值,那麼結果是左值,反之,如果成員所屬的物件是右值,那麼結果是右值。

10、當條件運算子:兩側的表示式是左值或者能轉換成同一左值時,結果是左值,反之,結果是右值。