国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

在程序開發中,++i 與 i++的區別在哪里?

2019-11-10 22:00:29
字體:
來源:轉載
供稿:網友

(原地址:https://www.zhihu.com/question/19811087)

問題:

在程序開發中,++i 與 i++的區別在哪里?

解答:

i++ 與 ++i 的主要區別有兩個:1、 i++ 返回原來的值,++i 返回加1后的值。2、 i++ 不能作為左值,而++i 可以。毫無疑問大家都知道第一點(不清楚的看下下面的實現代碼就了然了),我們重點說下第二點。首先解釋下什么是左值(以下兩段引用自中文維基百科『右值引用』詞條)。左值是對應內存中有確定存儲地址的對象的表達式的值,而右值是所有不是左值的表達式的值。一般來說,左值是可以放到賦值符號左邊的變量。但能否被賦值不是區分左值與右值的依據。比如,C++的const左值是不可賦值的;而作為臨時對象的右值可能允許被賦值。左值與右值的根本區別在于是否允許取地址&運算符獲得對應的內存地址。比如,
int i = 0;int *p1 = &(++i); //正確int *p2 = &(i++); //錯誤++i = 1; //正確i++ = 5; //錯誤那么為什么『i++ 不能作為左值,而++i 可以』?看它們各自的實現就一目了然了:
// 前綴形式:int& int::Operator++() //這里返回的是一個引用形式,就是說函數返回值也可以作為一個左值使用{//函數本身無參,意味著是在自身空間內增加1的  *this += 1;  // 增加  return *this;  // 取回值}//后綴形式:const int int::operator++(int) //函數返回值是一個非左值型的,與前綴形式的差別所在。{//函數帶參,說明有另外的空間開辟  int oldValue = *this;  // 取回值  ++(*this);  // 增加  return oldValue;  // 返回被取回的值}如上所示,i++ 最后返回的是一個臨時變量,而臨時變量是右值
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海兴县| 铜川市| 旌德县| 治多县| 正镶白旗| 合山市| 揭东县| 图木舒克市| 镇康县| 吴江市| 酒泉市| 孝昌县| 镇坪县| 滦平县| 巨鹿县| 西畴县| 吉木乃县| 阳谷县| 中宁县| 内黄县| 巴林左旗| 海晏县| 永德县| 镇赉县| 洱源县| 崇礼县| 天门市| 新竹市| 乌兰浩特市| 灯塔市| 谢通门县| 徐州市| 大名县| 呼图壁县| 和静县| 合水县| 江源县| 阳春市| 平乡县| 铅山县| 龙岩市|