賦值 遞增和遞減運算子

2022-05-28 04:15:11 字數 1102 閱讀 4243

賦值運算子左側運算物件必須是可以修改的左值。

賦值運算子滿足右結合律。

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...