問:什麼是引用引用就是給物件起別名
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,可修改,指標可以重新賦予新的位址指向不同物件,而引用則始終指向初始化時指定的物件,但是指定物...