欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

<五>掌握左值引用和初識(shí)右值引用

1:C++的引用,引用和指針的區(qū)別?
1:從匯編指令角度上看,引用和指針沒有區(qū)別,引用也是通過地址指針的方式訪問指向的內(nèi)存
int &b=a ; 是需要將a的內(nèi)存地址取出并存下來, b=20;(通過引用修改值時(shí),也是先取出指向的地址,然后訪問該地址的值并修改它,和通過指針修改值一樣)
在定義引用的時(shí)候,必須初始化,并能夠?qū)取地址。所以 int &c=20 編譯錯(cuò)誤的,因?yàn)?0取不了地址.
2:引用只有一級(jí)引用沒有多級(jí)引用,指針有一級(jí)指針和多級(jí)指針
3:定義一個(gè)引用變量和定義一個(gè)指針變量,其匯編指令是一樣的.通過引用變量修改所引用內(nèi)存的值和通過指針修改所指向內(nèi)存的值其底層指令也是一樣的.
4:
int array[5]={};
int *p=array;
cout<<sizeof(array)<<endl; //20
cout<<sizeof(p)<<endl; //4

成都創(chuàng)新互聯(lián)公司是專業(yè)的郴州網(wǎng)站建設(shè)公司,郴州接單;提供網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行郴州網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!


2:怎么定義一個(gè)引用變量
第1步:先對(duì)要引用的變量 取地址即&, &a ,然后定義一個(gè)指針來接, 所以就變成了 int *p=&a;
第2步: 用&符號(hào)取代 * ,所以變成了 int &p=a;

那么又怎么定義一個(gè)引用變量來引用一個(gè)數(shù)組呢?
第1步: 對(duì)數(shù)組名取地址 &array, 對(duì)數(shù)組取地址要怎么接? int (*p)[5]=&array;
第2步:用& 取代 *, 所以就變成了 int (&p)[5]=array;
如果打印 sizeof(p) ,值也是20,就是數(shù)組的大小.


3:引用有什么好處?
void swap(int a, int b){
int c=a;
a=b;
b=c;
}
上面的代碼是實(shí)現(xiàn)不了值交換的,需改為如下方式
void swap(int * a ,int * b){
int c =* a;
* a =* b;
* b=c;
}
另外一種方式,通過引用
void swap(int &a,int &b){
int c=a;
a=b;
b=c;
}
上面通過引用的方式整體在使用上更簡潔更自然.其實(shí)引用的方式在底層指令實(shí)現(xiàn)上,仍然是通過傳遞地址,
只是編譯器幫我們?cè)诤笈_(tái)做了很多轉(zhuǎn)換的工作.


4:關(guān)于左值引用和右值引用
左值: 它有內(nèi)存,有名字,值可以修改
例如 int a=10;
就可以定義引用 int &b=a;

但是 int &c=20;//不可以 20沒有內(nèi)存,無法取值,20 是右值
右值:沒有內(nèi)存,沒名字

C++11 以后,提供了右值引用 如下
int &&m=20;
也還可以 m =30;
上面代碼底層匯編的實(shí)現(xiàn)方式,其實(shí)是將20存儲(chǔ)在棧內(nèi)存中的一個(gè)臨時(shí)量上,然后把臨時(shí)量的內(nèi)存地址給 m

int &&m=20;//通過右值引用來引用右值

那么
int a=10;
int &b =a;

int &&c=20
左值引用和右值引用在匯編指令上的實(shí)現(xiàn)是怎么樣的?

一個(gè)右值引用變量本事是一個(gè)左值,這個(gè)右值引用本身也是有名字,也占存儲(chǔ)空間,也是可以取地址的,而且只能用左值引用變量來引用它,如下,
int &&m=20;
int &n=m;

不能用一個(gè)右值引用變量來引用一個(gè)左值,如下
int c=100;
int &&m=c;
上面編譯報(bào)錯(cuò),右值引用,編譯器是要為右邊的值生產(chǎn)臨時(shí)量的, c已經(jīng)有內(nèi)存空間了,還需要為他生成臨時(shí)量做啥呢?所以右值引用只能專門用來引用右值的,
指令上是通過產(chǎn)生臨時(shí)量的方式實(shí)現(xiàn)的.


5:為什么 const int &m =20 可以通過編譯?
實(shí)現(xiàn)方式是
int temp=20;
int &m =temp;
編譯器定義了一個(gè)臨時(shí)量,只是不可以 m=100; 因?yàn)?m 是const

網(wǎng)站名稱:&lt;五&gt;掌握左值引用和初識(shí)右值引用
網(wǎng)站URL:http://chinadenli.net/article42/dsoieec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、動(dòng)態(tài)網(wǎng)站、網(wǎng)站排名、關(guān)鍵詞優(yōu)化、定制開發(fā)、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名