C++ 參考
定義:
- 已定義的變數的別名,
使用方法:
- 宣告參考時必須將其初始化:
1 int rats=101; 2 int & rodents=rats;
注意:參考一旦被創建不能更改其與某個變數之間的關系,即參考不能再代表其他變數, - 用作函式引數
- 參考僅僅是別名,使用參考的方法完全與原資料型別相同,但是注意decltype關鍵字等中的用法略有不同;
int i; int & j = i; // j type int & decltype (j) k = i; // k type int & but not int
- 允許多層參考但參考的仍是原來的資料
int i = 999; int & j = i; // j is the reference of i int & k= j; // k is the reference of i
用作函式引數時的注意事項:
-
當實參與參考引數不匹配時:
- 若引數為 const 參考且函式呼叫的引數不是左值或與相應的 const 參考引數的型別不匹配,則 C++ 將創建型別正確的匿名變數,將函式呼叫的引數的值(實參值)傳遞給該匿名變數(實參值可以被強制轉換為相應型別時),并讓引數來參考該變數,這些匿名變數只在函式呼叫期間存在,此后編譯器便可以隨意將其洗掉,因此對于實參為 const 參考的 C++ 函式,如果實參不匹配且可以發生強制型別轉換,則其行為類似于按值傳遞,(例外的是有時非 const 右值參考引數也可達到類似生成匿名變數的效果:如 double && 形參可以輸入無關左右值的 int 和 const int 型別實參)
注(什么是左值?):左值引數是可被參考的資料物件,例如變數、陣列元素、結構成員、參考和解除參考的指標都是左值,非左值包括字面常量(用引號括起的字串除外,他們由其地址表示)和包含多項的運算式,
-
盡可能使用 const:
- 使用 const 可以避免無意中修改資料的編程錯誤,
- 使用 const 能使函式能處理 const 和非 const 實參,否則將只能接受非 const 資料,
-
使用 const 參考使函式能夠正確生成并使用臨時變數,
函式回傳參考時需要注意的事項:
-
避免回傳函式終止時不在存在的記憶體單元參考,解決辦法:
- 回傳一個作為引數傳遞給函式的參考,
- 用 new 來分配新的存盤空間,
- 必要時將回傳型別宣告為 const 參考,可避免犯糊涂;通過省略 const ,可以撰寫更簡短代碼,但其含義也更模糊,增加了犯錯的機會,然而有時省略 const 確實有道理,
1 free_throws & clone(free_throws & ft) 2 { 3 ... 4 return ft; 5 } 6 7 clone(ft)=four; //it's allowed, four covered ft
const free_throws & clone(free_throws & ft) { ... return ft; } clone(ft)=four; //it's not allowed
display(clone(ft)); //it's allowed, you can ues it like this
將參考用于物件:
- 基類參考可以指向派生類物件,而無需進行強制型別轉換,
void file_it(ostream & os) { ... } ofstream fout; file_it(fout);
例如:引數 os (其型別為 ostream & )可以指向 ostream 物件(如 cout ),也可以指向 ofstream 物件(如 fout ),
何時使用參考引數:
- 程式員能夠修改呼叫函式中的資料物件,
- 通過傳遞參考而不是整個資料物件,可以提高程式的運行速度,
- 什么時候使用參考、什么時候使用指標,一般性指導原則是
- 對于使用傳遞的值而不作修改的函式:
- 如果數據物件很小,如內置資料型別或小型結構,則按值傳遞,
- 如果資料物件是陣列,則使用指標,因為這是唯一的選擇,并將指標宣告為指向 const 的指標,
- 如果資料物件是較大的結構,則使用 const 指標或 const 參考,以提高程式的效率,這樣可以節省復制結構所需的時間和空間,
- 如果資料物件是類物件,則使用 const 參考,類設計的語意常常要求使用參考,這是 C++ 新增這項特性的主要原因,因此,傳遞類物件引數的標準方式是按參考傳遞,
- 對于修改呼叫函式中資料的函式:
- 如果資料物件是內置資料型別,則使用指標,如果看到諸如 fixit(&x) 這樣的代碼(其中 x 是 int ),則很明顯,該函式將修改 x ,
- 如果資料物件是陣列,則只能使用指標,
- 如果資料物件是結構,則使用參考或指標,
- 如果資料物件是類物件,則使用參考,
- 對于使用傳遞的值而不作修改的函式:
右值參考:
- C++ 11 新增了右值參考——這種參考可指向右值,使用 && 宣告,之前的參考稱為左值參考,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/36241.html
標籤:C++
