一:簡單介紹
引用又稱別名,一般指左值引用。
使用方式:型別 &引用變數 = 初始值;
引用必須初始化,初始值必須是一個有記憶體的地址物件;
引用一旦繫結到物件,將無法繫結其他物件;
右值是為了支援移動操作,是一個臨時數,不能取地址;
定義形式:型別 &&右值引用變數 = 右值表示式;
二:比較分析
1)引用VS賦值:
初始化變數:初始值會被複制到物件中;變數可以修改;
初始化引用:繫結一個變數(存地址);引用初始化後不可修改;
引用不是物件,它是物件的別名(只是物件的起始地址),引用被實現為與所引物件相同的記憶體地址;
2)引用VS指標:
指標可以指向同型別的不同的物件;引用不行;
引用是物件的一個別名,定義時必須是有記憶體地址的物件進行初始化;指標是擁有獨立記憶體的變數,可以改變它的內容;
指標通過解引用*使用,引用直接使用;
指標可以不指向任何物件,為0,引用不可,必須初始化;
指標的賦值改變的是指向關係,引用的賦值改變的是物件的值(引用關係是不可變的);
3)左值引用VSz右值引用:
右值不能取地址,左值有地址,有名字;
常數是右值,變數是左值;
可以顯式 的把左值變為右值,右值不能變成左值;
方法:int r1=0;
int &&r2=std::move(r1);