引用變數

引用變數

引用變數來源於數學,是計算機語言中能儲存計算結果或能表示值抽象概念。變數可以通過變數名訪問。在指令式語言中,引用變數通常是可變的;但在純函式式語言中,變數可能是不可變的。

基本介紹

  • 中文名:引用變數
  • 使用說明:起標識作用的運算地址
  • 使用原則:數據對象小、按值傳遞
  • 定義:最多用處就是作為函式的參數
定義,使用說明,使用原則,

定義

intrate=80;int&pt=rate;
⒈pt 是引用變數,申明引用變數時必須將其初始化.pt 和rate 的值指向相同的記憶體變數. 引用的最多用處就是作為函式的參數(結構和對象).通過引用變數作參數可以是函式使用原始數據.而不是拷貝.
⒉引用的特點更接近於const 指針,一旦與某個變數關聯起來就將一直效忠於它,可以通過初始化來設定引用,但是不能通過賦值來設定
intother=30;pt=other;
此時,rate的值和 pt的值都改為了30 但是地址還是原來rate的地址.而不是other的地址.
⒊如果程式不想改變傳遞給它的信息,但是又想使用引用,那么則應該使用常量引用
inttest(constint&p)//當改變p值是,編譯器將生成錯去訊息
⒋如果實參和套用參數不匹配,c++將為此產生臨時變數,這個只有在參數為const 引用時才允許這么做,在下列情況下生成臨時變數,並且函式參數將引用該變數.
****當參數不是const引用時,如果不是左值(又無法生成臨時變數)將導致編譯錯誤*****(強調了第三點,即儘量用const)
.實參的類型正確,但是不是左值
.實參類型不正確,但是可以轉化為正確類型
左值概念:除了字面常量和包含多項式的表達式可以被引用的數據對象
⒌儘量將函式返回的引用聲明為const,避免你通過返回的引用而修改它的值.返回引用其實是返回被引用變數的別名
constsysop&use(sysop&pref)sysoppref={};sysoptest=use(pref);
相當於
user(pref);test=pref;
⒍繼承的特徵就是基類的引用可以指向派生類對象,而無需強制類型轉化.這種好處是可以定義一個接受基類引用座位參數的函式,調用函式是既可以將基類對象作為參數,也可以將派生類作為參數
如果
int&ir=0
表示的是地址為0,而不是引用的意思,聲明中有變數賦值的情況,必須把變數作為引用的對象,要不然系統無法識別你的語句是引用還是賦值!

使用說明

如果int &ir=0,表示的是地址為0,而不是引用的意思,聲明中有變數賦值的情況,必須把變數作為引用的對象,要不然系統無法識別你的語句是引用還是賦值!
⑴&;在此不是求地址運算,而是起標識作用。
⑵類型標識符是指目標變數的類型。
⑶聲明引用時,必須同時對其進行初始化
⑷引用聲明完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數名的別名。
ra=1; 等價於 a=1;
⑸聲明一個引用,不是新定義了一個變數,它只表示該引用名是目標變數名的一個別名,它本身不是一種數據類型,因此引用本身不占存儲單元,系統也不給引用分配存儲單元。故:對引用求地址,就是對目標變數求地址。&ra與&a相等。
⑹ 可以建立數組的引用,C++中解決數組做形參的降價問題就是通過使用數組的引用
⑺不能建立引用的引用,不能建立指向引用的指針。因為引用不是一種數據類型,所以沒有引用的引用,沒有引用的指針
例如:
int n;
int &&r=n;//錯誤,編譯系統把"int &"看成一體,把"&r"看成一體,即建立了引用的引用,引用的對象應當是某種數據類型的變數
int &*p=n;//錯誤,編譯系統把"int &"看成一體,把" *p "看成一體,即建立了指向引用的指針,指針只能指向某種數據類型的變數
⑻值得一提的是,可以建立指針的引用
例如:
int *p;
int *&q=p;//正確,編譯系統把" int * "看成一體,把"&q"看成一體,即建立指針p的引用,亦即給指針p起別名q。

使用原則

對於按值傳遞而不修改的函式時:
.數據對象小,按值傳遞
.數據對象是數組,則定義const 的指針
.如果數據對象為較大的結構,則可以使用const 指針或者cosnt 引用,
.如果是類對象,則使用const 引用.
對於修改值的函式
.如果是內置數據,則使用指針
.數組,也只能使用指針
.結構 使用指針或者引用
.對象.使用引用

相關詞條

熱門詞條

聯絡我們