c++中的自增/自減操作方式
基本概念
value--(后綴遞減):先使用值,再減1--value(前綴遞減):先減1,再使用值value++(后綴遞增):先使用值,再減1++value(前綴遞增):先加1,再使用值
下面有這樣一個(gè)問題,請(qǐng)先看代碼:
#include <iostream>
void fun(int x) {
std::cout << "Parameter value: " << x << std::endl;
}
// 后綴遞減示例
void postfix_example() {
int value = 2;
fun(value--); // 傳入2,之后value變?yōu)?
std::cout << "After call: " << value << std::endl;
// 輸出:
// Parameter value: 2
// After call: 1
}
// 前綴遞減示例
void prefix_example() {
int value = 2;
fun(--value); // 先將value減為1,然后傳入1
std::cout << "After call: " << value << std::endl;
// 輸出:
// Parameter value: 1
// After call: 1
}看到的上面的代碼,func內(nèi)部會(huì)輸出什么?整個(gè)的執(zhí)行順序是什么?
原理解析
要回答上面的問題,要首先要搞明白一件事:
- value--是一個(gè)表達(dá)式
- 表達(dá)式的值與value的最終值沒有關(guān)系
- 表達(dá)式的值是前面章節(jié)中的使用值
以前面的例子說明:
- value的初始值為2
- value--表達(dá)式,由于這是一個(gè)后綴遞減運(yùn)算,所以表達(dá)式的值就是2;到了這一步表達(dá)式就結(jié)束了,后面的value自減1運(yùn)算與這個(gè)表達(dá)式就沒有任何關(guān)系了
如果代碼寫成下面的樣子大家都能看懂:
void postfix_example() {
int value = 2;
value--; //這里value變成了1,
fun(value); // 傳入1
std::cout << "After call: " << value << std::endl;
// 輸出:
// Parameter value: 1
// After call: 1
}容易造成大家疑惑的地方就是:
如果自減/自減表達(dá)式作為函數(shù)參數(shù),函數(shù)因?yàn)槭褂昧诉@個(gè)表達(dá)式的值,而很多朋友對(duì)這個(gè)表達(dá)式的值具體是多少或者說傳入函數(shù)的值是多少存在疑問。
現(xiàn)在在這里非常明確的告訴大家:
c++自增/自減表達(dá)式的值需要嚴(yán)格結(jié)合自增自減運(yùn)算符的概念進(jìn)行理解。
下面我舉出下面的例子:
int value = 5; std::cout<<value--<<std::end; //輸出5 int value = 5; std::cout<<--value<<std::end; //輸出4 int value = 5; std::cout<<value++<<std::end; //輸出5 int value = 5; std::cout<<++value<<std::end; //輸出6
執(zhí)行順序
下面分析代碼的執(zhí)行順序:
fun(value--);
這行代碼的執(zhí)行順序是:
1.value-- 表達(dá)式被求值:
- 保存 value 的當(dāng)前值(稱為臨時(shí)值)
- 將 value 減 1
- 返回之前保存的臨時(shí)值
2.返回的臨時(shí)值作為參數(shù)傳遞給 fun 函數(shù)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++ 中回文數(shù)判斷簡(jiǎn)單實(shí)例
這篇文章主要介紹了C++ 中回文數(shù)判斷簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05
STL區(qū)間成員函數(shù)及區(qū)間算法總結(jié)
這篇文章主要匯總介紹了STL區(qū)間成員函數(shù)及區(qū)間算法,有需要的小伙伴可以參考下。2015-07-07
c++將數(shù)組名作為函數(shù)參數(shù)對(duì)數(shù)組元素進(jìn)行相應(yīng)的運(yùn)算
這篇文章主要介紹了c++將數(shù)組名作為函數(shù)參數(shù)對(duì)數(shù)組元素進(jìn)行相應(yīng)的運(yùn)算,需要的朋友可以參考下2014-05-05

