c++中的自增/自減操作方式
基本概念
value--(后綴遞減):先使用值,再減1--value(前綴遞減):先減1,再使用值value++(后綴遞增):先使用值,再減1++value(前綴遞增):先加1,再使用值
下面有這樣一個(gè)問(wèn)題,請(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í)行順序是什么?
原理解析
要回答上面的問(wèn)題,要首先要搞明白一件事:
- value--是一個(gè)表達(dá)式
- 表達(dá)式的值與value的最終值沒有關(guān)系
- 表達(dá)式的值是前面章節(jié)中的使用值
以前面的例子說(shuō)明:
- 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á)式的值具體是多少或者說(shuō)傳入函數(shù)的值是多少存在疑問(wèn)。
現(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)文章
教你Visual?Studio?2022如何新建一個(gè)C語(yǔ)言工程(圖文詳解)
這篇文章主要介紹了Visual?Studio?2022如何新建一個(gè)C語(yǔ)言工程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09
Qt5.9實(shí)現(xiàn)簡(jiǎn)單復(fù)合圖形
這篇文章主要為大家詳細(xì)介紹了Qt5.9實(shí)現(xiàn)簡(jiǎn)單復(fù)合圖形,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
pybind11: C++ 工程提供 Python 接口的實(shí)例代碼
這篇文章主要介紹了pybind11: C++ 工程如何提供 Python 接口,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
C語(yǔ)言實(shí)現(xiàn)括號(hào)匹配的方法
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)括號(hào)匹配的方法,文中代碼簡(jiǎn)單易懂,方便大家更好的學(xué)習(xí),感興趣的朋友可以參考下2020-06-06

