賦值運算子左側運算物件必須是可以修改的左值。
賦值運算子滿足右結合律。
int ival,jval;
ival = jval = 0; //正確,都被賦值為0
任意一種復合運算子都等價於:
a = a op b;
唯一的區別是左側運算物件的求值次數,使用復合運算子只求值一次,使用普通運算子則求值兩次,這兩次包含:
遞增遞減運算子有兩個版本:
注意:除非必須,否則不要使用遞增遞減的後置版本。
前置版本的遞增運算子避免了不必要工作,它把值加1後直接返回改變了的運算物件,與之相比,後置版本則需要將原始值儲存下來以便返回這個未修改的值,如果我們不需要修改前的值,那麼後置版本操作就是一種浪費。
對於整數和指標而言,編譯器可能對這種額外的工作進行一定的優化,但是對於迭代器型別,這種額外的開銷消耗巨大,建議使用前置版本。
如果想在一條復合表示式中即將變數的加1或減1又要使用它原來的值,此時就必須採用遞增或遞減的後置版本。
例如,迴圈輸出乙個vector中的內容,直到遇到第乙個負值為止:
auto pbeg = v.begin();
while(pbeg != v.end() && &pbeg >=0)
cout<
while(beg != s.end() &&!isspace(*beg))
*beg = toupper(*beg++); //錯誤,該賦值語句未定義
賦值運算子左右兩端的運算物件都用到了beg
,並且右側的運算物件還改變了beg
的值,所以該賦值語句是未定義的,編譯器可以按照下面任意一種思路來處理該表示式:
*beg = toupper(*beg); //如果先求左側的值
*(beg+1) = toupper(*beg); //如果先求右側的值
遞增和遞減運算子
定義遞增和遞減運算子的類應該同時定義前置版本和後置版本。這些運算子通常應該被定義成類的成員。為了與內建版本保持一致,前置運算子應該返回遞增或遞減後物件的引用。區分前置和後置運算子 後置版本接受乙個額外的 不被使用 int型別的形參。當我們使用後置運算子時,編譯器為這個形參提供乙個值為0的實參。這個形...
遞增和遞減運算子
如果需要反覆給數字變數新增或減去1,可以使用遞增 和遞減 運算子來完成 在js中,遞增 和遞減 既可以放在變數前面,也可以放在變數後面,放在變數前面時,我們可以稱為前置遞增 遞減 運算子,放在變數後面是,我們可以稱為後置遞增 遞減 運算子 注意 遞增和遞減運算子必須和變數配合使用 1.前置自增 1....
C 遞增 遞減 運算子過載
每日心得 獨上高樓,望盡天涯路 日期 12.14 學習內容 遞增 遞減 運算子過載 重點 遞增運算子過載 1 前置遞增 返回 類的變數自身 可用於 重複 遞增 p 合法 2 後置遞增 返回 區域性變數的值 不可用於 重複 遞增 p 合法 p 非法 表示式必須時可修改左值 includeusing n...