原創博客:轉載請標明出處:http://www.cnblogs.com/zxouxuewei/
1.引用變量的主要用途:
用作函數的形參,通過將引用變量用作參數,函數將使用原始數據而不是其拷貝。
2.引用變量用法
創建變量的引用:int& a = b;(是將a的類型聲明為int&,即int變量的引用)
注意:在聲明變量的引用時必須初始化(如之前例句)
int& b;
a = b;//should not do this
3.只能通過初始化聲明來設置引用,不能通過賦值來設置
(1)int& a = b;等同於int* const a = &b;
(2)只能通過初始化來設置引用,不能通過賦值來設置
int& a = b;
int c = 50;
a= c;//this can change the b’s value to 50
4.將引用用作函數參數
(1)引用傳遞:將引用用作函數參數,使得函數中的變量名稱為調用程序中的變量的別名。
(2)按值傳遞與按引用傳遞:
void sneezy(int x)
int main
{
int times = 20;//創建times變量,賦值20給它
sneezy(times);
…
}
void sneezy(int x)
{
…//創建x變量,將傳遞來的值20賦給它
}
void sneezy(int x)
int main
{
int times = 20;//創建times變量,賦值20給它
sneezy(times);
…
}
void sneezy(int& x)
{
…//使x成為times的別名
}
(3)常量引用
如果程序員的意圖是讓函數使用傳遞給它的信息,而不對這些信息進行修改,同時又想使用引用,則應使用常量引用。
定義方式為:
(4)臨時變量、引用參數和const
僅當參數為const引用時,如果實參與引用參數不匹配,C++將產生臨時變量。
兩種情況:
a.實參的類型正確,但不是左值。
左值參數:可被引用的數據對象,如:變量、數組元素、結構成員、引用和被解除引用的指針。非左值包括:字面常量和包含多項式的表達式
b.實參的類型不正確,但可以轉換為正確的類型。
注意:如果接受引用參數的函數的意圖是修改作為參數傳遞的變量,則創建臨時變量將阻止這種意圖的實現。
(5)應盡量使用const
a.使用const可以避免無意中修改數據的編程錯誤;
b.使用cosnt使函數能夠處理const和非const實參,否則只能接受非const數據;
c.使用const引用使函數能夠正確生成並使用臨時變量。
5.將引用用於結構
引用非常適合用於結構和類。引入引用的目的主要就是用於這些類型。
有如下代碼:
{
…
int used;
}
const sysop& use(sysop& sysopref)
通常,返回機制將返回值復制到臨時存儲區域中,隨后調用程序將訪問該區域。而返回引用則意味着調用程序將直接訪問返回值。
const的意思是:不能使用返回的引用來直接修改它指向的結構。
6.引用,指針和按值傳遞該什么時候使用?
(1)使用引用參數的主要情況:
a.程序員能夠修改調用函數中的數據對象;
b.通過傳遞引用而不是整個數據對象,可以提高程序的運行速度。
(2)對於使用傳遞的值而不做修改的函數:
a.數據對象很小,如內置數據類型或小型結構,則按值傳遞;
b.數據對象是數據,使用const 指針;
c.數據對象是較大的結構,使用const指針或const引用;
d.數據對象是類對象,使用const引用。
(3)對於修改調用函數中數據的函數:
a.數據對象是內置數據類型,使用指針;
b.數據對象是數組,使用指針;
c.數據對象是結構,使用指針或引用
d.數據對象是類對象,使用引用。