亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

C++初級主題--(4)引用

2019-11-14 10:49:25
字體:
來源:轉載
供稿:網友

一.引用的概念

C++函數中參數的傳遞方式是傳值。在函數域中為參數重新分配內存,而把實參的數值傳遞到新分配的內存中。它的優點是有效避免函數的副作用(即改變實參的值)。 如果要求改變實參的值,怎么辦呢?如果實參是一個復雜的對象,重新分配內存會引起程序執行效率大大下降,怎么辦呢?在C++中有一種新的導出型數據類型—引用(reference)可以解決上面的難題。引用又稱別名(alias)。

二.傳值和傳引用的區別

1.用交換程序舉例說明 (1)直接通過傳值的方式無法更改實參的值

#include<iostream>using namespace std;void swap1(int x, int y){ int tmp = y; y = x; x = tmp;}void main(){ int a = 10; int b = 20; swap1(a,b);}

a,b的值仍未交換,只交換了x,y的值。 這里寫圖片描述 (2)C語言中通過指針的方式可以交換

#include<iostream>using namespace std;void swap1(int *x, int *y){ int tmp = *y; *y = *x; *x = tmp;}void main(){ int a = 10; int b = 20; swap1(&a,&b);}

可以看到x,y與a,b的地址不同,額外為形參開辟了空間 這里寫圖片描述 (3)C++中提供引用的方式

#include<iostream>using namespace std;void swap1(int &x, int &y){ int tmp = y; y = x; x = tmp;}void main(){ int a = 10; int b = 20; swap1(a,b);}

可以看到x,y的地址與a,b相同,是a,b的別名,沒有重新分配空間。 這里寫圖片描述

2.總結 (1)傳引用可以直接更改實參的值 (2)傳引用不用額外分配空間保存實參的數值。 (3)不能定義空引用,即引用的對象必須存在。 3.引用的本質仍是指針 關于這一點,請參考博文 c++ 引用 底層實現機制

引用是在編譯的過程中被處理的,實際上就是在編譯層面對程序員進行的一個比較友好的語法,而在實現上是由編譯器完成了地址的傳遞,實質上還是指針。 不能簡單的理解為一個別名,我們可以這樣用,但是要知道底層就是一個指針變量,是要占用內存空間的,和define是不一樣的。

三.引用的分類

1.變量的引用

int a = 10;int b = &a;

b是a的引用

2.指針的引用

int a = 10;int *p = &a;int *&q = p;

q是p的引用

3.數組的引用

int ar[10] = {0};int (&br)[10] = ar;

br是ar的引用

4.常量的引用 (1)常量必須用常量引用

const int x = 100;const int &y = x;

(2)變量可以用常量引用

int x = 100;const int &y = x;

(3)不同類型間進行常引用

double x = 13.14;const int &y = x;

這里寫圖片描述可以看到y與x的地址不同,此時,不同類型之間進行賦值運算,一定會產生臨時對象(假設為tmp),最終y是tmp的引用。同時,應注意:對于所有的臨時對象,必須同樣假設它們是不可存取的,即具有常量的性質。當改變這種數據時,編譯器會指出錯誤,這是非常有用的提示,因為這個改變會導致信息丟失。

5.函數中的引用,即函數返回引用或函數參數中包含引用

(1)最經??匆娨玫牡胤绞窃诤瘮祬岛头祷刂抵?。當引用被用作函數參數時,在函數內任何對引用的更改將對函數外的參數產生改變。 (2)當然可以傳遞一個指針來做相同的事情,但引用具有更清晰的語法。(可以把引用看作一個使語法更加便利的工具。) (3)如果函數返回一個引用,必須像從函數返回一個指針一樣對待。當函數返回時,無論引用關聯的是什么都應該存在,否則,將不知道指向哪一個內存

int* fun1(int *x) //(2){ (*x)++; return x; //正確,x指向確定的內存} int& fun2(int &x) //(1){ x++; return x; //正確,x指向確定的內存}int& fun3(){ int q; //return q; //錯誤,局部變量,最終指向不明確的內存 static int p; return p; //正確,盡管fun3運行結束,但是p被static修飾,為全局變量,生存作用域仍存在,指向明確的內存}int main(){ int a = 10; fun1(&a); //ugly(but explicit) fun2(a); //clean(but hidden) }

四.參數傳遞準則

當給函數傳遞參數時,人們習慣上通過常量引用來傳遞。雖然看起來似乎僅是出于效率考慮(通常在設計與裝配程序時并不考慮效率),但是這樣會帶來很多危險??截悩嬙旌瘮敌枰ㄟ^傳值方式傳遞對象,但并不總是可行的 這種簡單習慣可以大大提高效率:傳值方式會調用構造函數和析構函數,但是如果不想改變參數,則可以通過常量引用傳遞,它僅需要將地址壓棧。

事實上,只有一種情況不適合用傳地址方式。就是當傳值是唯一安全的途徑,否則將會破壞對象時。所以需要依據上下文


上一篇:hdu1087【記憶化搜索】

下一篇:python反射

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一页中文字幕| 亚洲欧美日本另类| 国产成人精品999| 久久免费视频网| 国产精品午夜国产小视频| 91精品在线影院| 国产日韩欧美在线视频观看| 中文字幕免费精品一区高清| 国产精品久久久亚洲| 亚洲天堂成人在线视频| 国产精品pans私拍| 国产精品九九九| 国产噜噜噜噜噜久久久久久久久| 成人h猎奇视频网站| 国产成人一区三区| 欧美日韩中文字幕| 国外日韩电影在线观看| 中文字幕亚洲综合久久| 国产精品人成电影在线观看| 久久国产精品久久国产精品| 日韩av一区二区在线| 亚洲伊人第一页| 69国产精品成人在线播放| 亚洲一级黄色片| 久久久视频在线| 一区二区三区精品99久久| 日韩av观看网址| 亚洲free性xxxx护士白浆| 亚洲国产欧美在线成人app| 久久躁日日躁aaaaxxxx| 性色av香蕉一区二区| 欧亚精品在线观看| 成人黄色网免费| 91在线观看免费网站| 日韩欧美在线观看视频| 日韩精品在线观看视频| 免费成人高清视频| 日产精品99久久久久久| 日韩免费电影在线观看| 久久夜色精品国产欧美乱| 欧美久久精品午夜青青大伊人| 精品中文字幕在线观看| 欧美精品做受xxx性少妇| 狠狠久久五月精品中文字幕| 国产福利视频一区二区| 茄子视频成人在线| 国产精品入口夜色视频大尺度| 国产精品福利在线观看网址| 一个色综合导航| 亚洲国产精品一区二区三区| 91精品久久久久久久久青青| 丰满岳妇乱一区二区三区| 久久免费视频这里只有精品| 成人做爽爽免费视频| 欧美日韩国产一区二区| 久久视频精品在线| 日本精品在线视频| 亚洲精品中文字幕av| 精品亚洲aⅴ在线观看| 欧美大尺度电影在线观看| 亚洲精品在线观看www| 91在线视频成人| 欧美亚洲另类制服自拍| 欧美在线中文字幕| 精品国产乱码久久久久酒店| 亚洲综合国产精品| 欧美猛交ⅹxxx乱大交视频| 中文字幕亚洲国产| 成人xxxx视频| 国产精品露脸自拍| 亚洲欧美三级在线| 国产亚洲在线播放| 日韩av在线免费观看| 91在线免费视频| 欧美孕妇孕交黑巨大网站| 亚洲**2019国产| 国产欧美韩国高清| 国产精品av在线播放| 国产在线精品自拍| 欧美一级淫片aaaaaaa视频| 欧美日韩国产成人高清视频| 国产视频久久网| 92福利视频午夜1000合集在线观看| 国产精品18久久久久久麻辣| 午夜免费久久久久| 亚洲影影院av| 国产精品日韩欧美大师| 欧美成年人视频网站| 欧美精品久久久久久久久| 亚洲欧洲中文天堂| 69影院欧美专区视频| 自拍偷拍亚洲在线| 亚洲图片欧美午夜| 81精品国产乱码久久久久久| 欧美日韩另类字幕中文| 1769国产精品| 久久久久久久久久av| 欧美在线观看日本一区| 国产成人在线亚洲欧美| 久久人91精品久久久久久不卡| 日韩av网站大全| 国模精品视频一区二区| 亚洲综合在线小说| 久久久精品视频在线观看| 一区三区二区视频| 欧美第一黄网免费网站| 91精品国产91久久久久福利| 国产精品第七十二页| 色妞久久福利网| 亚洲自拍偷拍区| 日本国产精品视频| 青草青草久热精品视频在线观看| 欧美性xxxxxxx| 日韩毛片中文字幕| 91九色综合久久| 日日骚久久av| 国产成人一区二区| 日韩中文在线视频| 亚洲福利视频在线| 欧美有码在线视频| 亚洲第一福利在线观看| 在线观看国产精品淫| 欧美激情videoshd| 亚洲精品网站在线播放gif| 狠狠爱在线视频一区| 亚洲自拍偷拍网址| 日韩经典中文字幕| 国产日韩在线免费| 97av在线视频免费播放| 日本在线观看天堂男亚洲| 久久综合国产精品台湾中文娱乐网| 欧美日韩中文字幕在线视频| 成人精品网站在线观看| 亚洲欧洲自拍偷拍| 性日韩欧美在线视频| 久久久久久国产三级电影| 日韩免费在线看| 欧美精品一区二区三区国产精品| 日韩视频免费观看| 91在线视频精品| 国产成人精品优优av| 日韩免费av片在线观看| 国产亚洲欧洲在线| 欧美性xxxxxxx| 日韩电影在线观看免费| 国产男女猛烈无遮挡91| 97在线免费观看| 国内精品久久久久久影视8| 色婷婷久久av| 国产欧美一区二区三区久久| 日韩av手机在线| 亚洲国产精品成人一区二区| 亚洲3p在线观看| 欧美日本国产在线| 欧美性高潮床叫视频| 亚洲国产成人在线播放| 国产精品伦子伦免费视频| 久久久国产视频| 日韩欧美精品中文字幕| 精品丝袜一区二区三区| 亚洲片国产一区一级在线观看| 国产日韩欧美另类| 欧美性猛交丰臀xxxxx网站| 国产成人亚洲综合青青|