詳解C++中的增量運(yùn)算符++和減量運(yùn)算符--的用法
前綴增量和減量運(yùn)算符:++ 和 --
語(yǔ)法
++ unary-expression –– unary-expression
備注
前綴遞增運(yùn)算符 (++) 向其操作數(shù)添加 1;此遞增值是表達(dá)式的結(jié)果。操作數(shù)必須是類(lèi)型不為 const 的左值。結(jié)果是與操作數(shù)相同類(lèi)型的左值。
前綴遞減運(yùn)算符 (––) 與前綴遞增運(yùn)算符類(lèi)似,只不過(guò)操作數(shù)將減少 1,并且結(jié)果是遞減值。
前綴和后綴遞增和遞減運(yùn)算符均會(huì)影響其操作數(shù)。它們之間的主要差異是遞增或遞減在表達(dá)式的計(jì)算中出現(xiàn)的順序。在前綴形式中,將在表達(dá)式計(jì)算中使用值之前進(jìn)行遞增或遞減,因此表達(dá)式的值與操作數(shù)的值不同。在后綴形式中,將在表達(dá)式計(jì)算中使用值之后進(jìn)行遞增或遞減,因此表達(dá)式的值與操作數(shù)的值相同。例如,以下程序?qū)⒋蛴 ?+i = 6”:
// expre_Increment_and_Decrement_Operators.cpp // compile with: /EHsc #include <iostream> using namespace std; int main() { int i = 5; cout << "++i = " << ++i << endl; }
整型或浮動(dòng)類(lèi)型的操作數(shù)將按整數(shù)值 1 遞增或遞減。結(jié)果的類(lèi)型與操作數(shù)類(lèi)型相同。指針類(lèi)型的操作數(shù)將按其所尋址對(duì)象的大小遞增或遞減。遞增的指針將指向下一個(gè)對(duì)象;遞減的指針將指向上一個(gè)對(duì)象。
由于增量和減量運(yùn)算符具有副作用,因此在預(yù)處理器宏中使用帶遞增或遞減運(yùn)算符的表達(dá)式時(shí)會(huì)產(chǎn)生意外的結(jié)果。請(qǐng)看以下示例:
// expre_Increment_and_Decrement_Operators2.cpp #define max(a,b) ((a)<(b))?(b):(a) int main() { int i = 0, j = 0, k; k = max( ++i, j ); }
宏將擴(kuò)展為:
k = ((++i)<(j))?(j):(++i);
如果 i 大于或等于 j 或者比 j 小 1,則將遞增兩次。
System_CAPS_note注意
由于 C++ 內(nèi)聯(lián)函數(shù)會(huì)消除副作用(如此處描述的副作用),并允許語(yǔ)言執(zhí)行更全面的類(lèi)型檢查,因此在很多情況下 C++ 內(nèi)聯(lián)函數(shù)較宏更為可取。
后綴增量和減量運(yùn)算符:++ 和 --
語(yǔ)法
postfix-expression
++
postfix-expression ––
備注
C++ 提供了前綴和后綴遞增和遞減運(yùn)算符;兩者的區(qū)別在于,在后綴表示法中,運(yùn)算符出現(xiàn)在 postfix-expression 之后,而在前綴表示法中,運(yùn)算符出現(xiàn)在 expression 之前。以下示例顯示了一個(gè)后綴遞增運(yùn)算符:
i++;
應(yīng)用后綴遞增運(yùn)算符 (++) 的效果是操作數(shù)的值增加一個(gè)適當(dāng)類(lèi)型的單位。同樣,應(yīng)用后綴遞減運(yùn)算符 (––) 的效果是操作數(shù)的值減少一個(gè)適當(dāng)類(lèi)型的單元。
值得注意的是,后綴遞增或遞減表達(dá)式的計(jì)算結(jié)果為應(yīng)用各自的運(yùn)算符之前的表達(dá)式的值。遞增或遞減運(yùn)算在計(jì)算操作數(shù)之后發(fā)生。僅當(dāng)在較大的表達(dá)式的上下文中發(fā)生后綴遞增或遞減運(yùn)算時(shí)才會(huì)出現(xiàn)此問(wèn)題。
當(dāng)后綴運(yùn)算符應(yīng)用于函數(shù)參數(shù)時(shí),在參數(shù)的值傳遞給函數(shù)之前,不能保證該值是遞增還是遞減。
將后綴遞增運(yùn)算符應(yīng)用于指向 long 類(lèi)型的對(duì)象數(shù)組的指針實(shí)際上會(huì)將指針的內(nèi)部表示形式增加 4。此行為會(huì)導(dǎo)致以前引用數(shù)組的第 n 個(gè)元素的指針引用第 (n+1) 個(gè)元素。
后綴遞增運(yùn)算符和后綴遞減運(yùn)算符的操作數(shù)必須是算術(shù)或指針類(lèi)型的可修改的(非 const)左值。結(jié)果的類(lèi)型與 postfix-expression 的類(lèi)型相同,但不再是左值。
后綴遞增運(yùn)算符的操作數(shù)也可以是 bool 類(lèi)型,在這種情況下,將計(jì)算操作數(shù),然后將其設(shè)置為 true)。后綴遞減運(yùn)算符的操作數(shù)不能是 bool 類(lèi)型。
以下代碼演示了后綴遞增運(yùn)算符:
// expre_Postfix_Increment_and_Decrement_Operators.cpp // compile with: /EHsc #include <iostream> using namespace std; int main() { int i = 10; cout << i++ << endl; cout << i << endl; }
不支持對(duì)枚舉類(lèi)型執(zhí)行后遞增和后遞減操作:
enum Compass { North, South, East, West ); Compass myCompass; for( myCompass = North; myCompass != West; myCompass++ ) // Error
上一篇:使用C++繪制GDI位圖的基本編寫(xiě)實(shí)例
欄 目:C語(yǔ)言
本文標(biāo)題:詳解C++中的增量運(yùn)算符++和減量運(yùn)算符--的用法
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2588.html
您可能感興趣的文章
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 01-10求子數(shù)組最大和的解決方法詳解
- 01-10深入二叉樹(shù)兩個(gè)結(jié)點(diǎn)的最低共同父結(jié)點(diǎn)的詳解
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)- 解析最少換車(chē)次數(shù)的問(wèn)題詳解
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-用棧實(shí)現(xiàn)表達(dá)式求值的方法詳解
- 01-10HDOJ 1443 約瑟夫環(huán)的最新應(yīng)用分析詳解
- 01-10深入理解C++中常見(jiàn)的關(guān)鍵字含義
- 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
- 01-10如何查看進(jìn)程實(shí)際的內(nèi)存占用情況詳解
- 01-10深入Main函數(shù)中的參數(shù)argc,argv的使用詳解


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫(xiě)分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫(xiě)函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10C#中split用法實(shí)例總結(jié)