C C 程式設計 引用

2021-08-21 08:44:03 字數 1891 閱讀 2576

問:什麼是引用

引用就是給物件起別名

int ival = 1024;        

int &refval = ival; // refval就是ival的別名

int &refval2 ; // 錯誤:引用必須被初始化

int &refval3 = refval; // ok:refval3實際上繫結在了ival上

int jval = refval; // ok:等效於 int jval = ival;

int refval4 = 1024; // 錯誤:1024是字面量,不是物件

允許在一條語句中有多個引用,其中每個引用識別符號必須以符合&開頭

問:引用為什麼必須初始化

因此無法將引用重新繫結到另乙個物件,引用的同時也必須初始化,編譯器不允許未繫結的引用出現

問:引用的分類

可以分為兩類:

#include using namespace std;

void change(int & rnum)

void main()

總結:

#include void main()

總結:

引用指標,相當於二維指標,如果想要修改指標的指向,傳遞指標的引用[函式傳參]

#include void main()

; int *p(a); //p指向陣列a的位址,*p = 1;

p += 1; //p是第乙個原始的位址,+1就是移動乙個元素

std::cout << *p << std::endl; //因此*p=2;

int * & rp(p); //左值引用改變指標, &放在型別與變數名之間,p有記憶體實體,因此是左值

rp += 1; //rp是p的別名,因此rp += 1;相當於p += 1;

std::cout << *p << std::endl; //p原來指向2,現在指向3

int * && rrp(p - 2); //p-2是在暫存器裡面進行操作的,因此是右值

rrp += 2; //rrp是p-2的別名,因此 p-2 +=2;

//左值引用引用記憶體裡面的值,右值引用引用暫存器裡面的值

void showit(int && rrnum)

void showitz(int & rrnum)

void main()

; showit(a[3] + 2); //a[3]+2=4+2=6,在暫存器裡面產生,是右值引用,可以節約記憶體

showit(move(a[3])); //move移動語義,把左值轉換為右值

showitz(a[3]);

cin.get();

}

總結:

左值引用和右值引用的區別

C C 程式設計 右值引用

右值引用不過是c 的一種新語法,重要的是基於右值引用引申處理的兩種c 程式設計技巧 移動語義和完美 c 98 03標準中就有引用,用 表示。但是此種引用方式有乙個缺陷,即正常情況下只能操作c 中的左值,無法對右值新增引用。舉個例子 int num 10 int b num 正確 int c 10 錯...

C C 引用介紹

引用簡介引用就是某一變數 目標 的乙個別名,對引用的操作與對變數直接操作完全一樣。引用的宣告方法 型別識別符號 引用名 目標變數名 例1 int a int ra a 定義引用ra,它是變數a的引用,即別名 說明 1 在此不是求位址運算,而是起標識作用。2 型別識別符號是指目標變數的型別。3 宣告引...

C C 程式設計04(指標和引用 遞迴)

第七章 指標和引用 遞迴 1.指標和引用的而區別 首先1,指標是非空性,而引用總是指向某些物件 必須宣告時初始化 不存在指向空值的引用。其次2,合法性,指標總是在使用前測試是否為空指標,引用不用測試。再次3,可修改,指標可以重新賦予新的位址指向不同物件,而引用則始終指向初始化時指定的物件,但是指定物...