版權所有,轉載請注明來源
(1)reference variable(rv) 主要用處是作為方程的形式參數,使用rv 可以直接對原數據進行操作而不是該數據的拷貝,節省了時間和空間,尤其是對於結構體以及類的一個對象來說,對於普通類型數據來說,傳值調用是不錯的選擇。
(2)使用 type & name 的形式定義一個引用變量,參考《c++ premier plus》上的例子,
int rats;
int & rodents = rats; (int & means “reference to an int variable”)
定義了一個rodents,它是指向rat的引用變量,初始化以后,rats and rodents有相同的值,指向相同的地方,可以互換使用,通俗的說,就是“一個東西,兩種叫法”。
(3)rv必須在聲明的時候初始化,初始化以后,指向的地方不再變化,相當於const 類型的指針,后續的賦值只能改變其值,不能改變地址。譬如
int & rodents = rats; 相當於
int * const pr = &rats;
(4)當函數(function)的形參(formal argument)為指向const 類型的rv,編譯器會在以下兩種情況下產生臨時變量,
- 當實參類型正確,但不是“左值(lvalue)”
- 當實參類型不正確,但是可以轉換為正確類型
(5)C++ 11 標准引入了新的稱為“右值引用(rvalue reference)”的語法,因此原來的引用現在稱為“左值引用(lvalue reference)”
(6)函數返回引用與返回值這兩種方式,有什么區別?
對於“返回值”這種返回方式,首先return語句后的對象,會被拷貝到一個臨時內存中,然后改臨時內存中的數據在被拷貝到調用函數的相應對象中,但是如果是“返回引用”,return語句后的對象直接拷貝到調用函數相應的對象中,更快。
(7)const 類型的引用返回,有什么用?
使用const 類型的引用返回,可以避免對返回值進行修改
(8)不要返回一個存儲類型只是local的變量的引用,因為當程序執行完該變量所在區域,該變量將不再存在,因此這是錯誤的設計。例子
int & test (int & x)
{
int temp;
temp = x;
return temp;
}
上述例子中,temp在test函數執行完畢后,將不再存在,因此返回temp的引用,程序將會出錯奔潰