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

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

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

2019-11-11 00:58:56
字體:
來源:轉載
供稿:網友

(原地址: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++ 最后返回的是一個臨時變量,而臨時變量是右值
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳东县| 汤原县| 惠东县| 新化县| 岳阳市| 灵川县| 凤翔县| 颍上县| 紫阳县| 孟连| 娄烦县| 林甸县| 岢岚县| 民勤县| 阿拉尔市| 伊宁市| 雅江县| 临江市| 商都县| 福建省| 丹江口市| 衡阳县| 西宁市| 牙克石市| 静安区| 新巴尔虎右旗| 武穴市| 海伦市| 陈巴尔虎旗| 酉阳| 拉孜县| 刚察县| 文登市| 安阳县| 宁陵县| 临泉县| 临泉县| 祁东县| 南溪县| 安陆市| 唐河县|