c++變量的引用---5


原創博客:轉載請標明出處:http://www.cnblogs.com/zxouxuewei/

 

1.引用變量的主要用途:

       用作函數的形參,通過將引用變量用作參數,函數將使用原始數據而不是其拷貝。

2.引用變量用法

創建變量的引用:int& a = b;(是將a的類型聲明為int&,即int變量的引用

注意:在聲明變量的引用時必須初始化(如之前例句)

int a;
int& b;
a = b;//should not do this

3.只能通過初始化聲明來設置引用,不能通過賦值來設置

(1)int& a = b;等同於int* const a = &b;

(2)只能通過初始化來設置引用,不能通過賦值來設置

int b = 100;
int& a = b;
int c = 50;
a= c;//this can change the b’s value to 50

4.將引用用作函數參數

(1)引用傳遞:將引用用作函數參數,使得函數中的變量名稱為調用程序中的變量的別名。

(2)按值傳遞與按引用傳遞:

/*按值傳遞:2個變量,2個名稱*/
void sneezy(int x)
int main
{
int times = 20;//創建times變量,賦值20給它
sneezy(times);

}

void sneezy(int x)
{
//創建x變量,將傳遞來的值20賦給它
}
/*按引用傳遞:1個變量,2個名稱*/
void sneezy(int x)
int main
{
int times = 20;//創建times變量,賦值20給它
sneezy(times);

}

void sneezy(int& x)
{
//使x成為times的別名
}

(3)常量引用

       如果程序員的意圖是讓函數使用傳遞給它的信息,而不對這些信息進行修改,同時又想使用引用,則應使用常量引用。

定義方式為:

double refcube(const double& ra);

(4)臨時變量、引用參數和const

       僅當參數為const引用時,如果實參與引用參數不匹配,C++將產生臨時變量。

兩種情況:

a.實參的類型正確,但不是左值。

左值參數:可被引用的數據對象,如:變量、數組元素、結構成員、引用和被解除引用的指針。非左值包括:字面常量和包含多項式的表達式

b.實參的類型不正確,但可以轉換為正確的類型。

注意:如果接受引用參數的函數的意圖是修改作為參數傳遞的變量,則創建臨時變量將阻止這種意圖的實現。

(5)應盡量使用const

a.使用const可以避免無意中修改數據的編程錯誤;

b.使用cosnt使函數能夠處理const和非const實參,否則只能接受非const數據;

c.使用const引用使函數能夠正確生成並使用臨時變量。

5.將引用用於結構

       引用非常適合用於結構和類。引入引用的目的主要就是用於這些類型。

有如下代碼:

struct sysop
{

int used;
}

const sysop& use(sysop& sysopref)

通常,返回機制將返回值復制到臨時存儲區域中,隨后調用程序將訪問該區域。而返回引用則意味着調用程序將直接訪問返回值。

const的意思是:不能使用返回的引用來直接修改它指向的結構。

use(looper).used = 10;//can not do this

6.引用,指針和按值傳遞該什么時候使用?

(1)使用引用參數的主要情況:

a.程序員能夠修改調用函數中的數據對象;

b.通過傳遞引用而不是整個數據對象,可以提高程序的運行速度。

(2)對於使用傳遞的值而不做修改的函數:

a.數據對象很小,如內置數據類型或小型結構,則按值傳遞;

b.數據對象是數據,使用const 指針;

c.數據對象是較大的結構,使用const指針或const引用;

d.數據對象是類對象,使用const引用。

(3)對於修改調用函數中數據的函數:

a.數據對象是內置數據類型,使用指針;

b.數據對象是數組,使用指針;

c.數據對象是結構,使用指針或引用

d.數據對象是類對象,使用引用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM