c++中的自增/自減操作方式
基本概念
value--
(后綴遞減):先使用值,再減1--value
(前綴遞減):先減1,再使用值value++
(后綴遞增):先使用值,再減1++value
(前綴遞增):先加1,再使用值
下面有這樣一個問題,請先看代碼:
#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)部會輸出什么?整個的執(zhí)行順序是什么?
原理解析
要回答上面的問題,要首先要搞明白一件事:
- value--是一個表達式
- 表達式的值與value的最終值沒有關系
- 表達式的值是前面章節(jié)中的使用值
以前面的例子說明:
- value的初始值為2
- value--表達式,由于這是一個后綴遞減運算,所以表達式的值就是2;到了這一步表達式就結束了,后面的value自減1運算與這個表達式就沒有任何關系了
如果代碼寫成下面的樣子大家都能看懂:
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 }
容易造成大家疑惑的地方就是:
如果自減/自減表達式作為函數(shù)參數(shù),函數(shù)因為使用了這個表達式的值,而很多朋友對這個表達式的值具體是多少或者說傳入函數(shù)的值是多少存在疑問。
現(xiàn)在在這里非常明確的告訴大家:
c++自增/自減表達式的值需要嚴格結合自增自減運算符的概念進行理解。
下面我舉出下面的例子:
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-- 表達式被求值:
- 保存 value 的當前值(稱為臨時值)
- 將 value 減 1
- 返回之前保存的臨時值
2.返回的臨時值作為參數(shù)傳遞給 fun 函數(shù)
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
教你Visual?Studio?2022如何新建一個C語言工程(圖文詳解)
這篇文章主要介紹了Visual?Studio?2022如何新建一個C語言工程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09pybind11: C++ 工程提供 Python 接口的實例代碼
這篇文章主要介紹了pybind11: C++ 工程如何提供 Python 接口,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09