新手入門:C++下的參考型別

來源:互聯網
上載者:User


參考型別也稱別名,它是個很有趣的東西。在c++ 下你可以把它看作是另外的一種指標,通過參考型別我們同樣也可以間接的操作對象,參考型別主要是用在函數的形式參數上,通常我們使用它是把類對象傳遞給一個函數。

  引用對象採用類型名加上&符號和名稱的方式進行定義。例如:(int &test;),這裡我們就定義了一個int類型的名為test 的引用,但是int &test;這樣的方式是不能夠被編譯成功的,因為引用的定義必須同時給應用進行賦值操作,這裡的賦值並不是說把變數的值傳遞給引用,而是把引用指向變數,寫成這樣就對了:(int &test=變數名;)。

#include <iostream>
using namespace std;

void main(void)
{

int a=10;
int &test=a;
test=test+2;

cout << &a << "|" << &test << "|" << a << "|" <<test << endl;

cin.get();
}

  觀察並編譯運行上面的代碼你會發現&a和&test的地址顯示是相同的,a和test的值顯示也是一樣的!

  結合前一個教程的內容我們來說一下const引用的相關內容,這裡要特別注意,和前一個教程一樣帶const修飾的引用同樣也容易混淆概念!

  const修飾如果用在引用上會有一個特別之處,它的奧妙就在於可以進行不同類型的對象的初始化,而這一切在普通變數操作上是不可能的下面我們來看一個例子:

#include <iostream>
using namespace std;

void main(void)
{

int a=10;
//double &test = a + 1.2f; //這句就是錯誤的!
const double &test = a + 1.2f;

cout << &a << "|" << &test << "|" << a << "|" <<test << endl;

cin.get();
}

  上面的代碼足夠說明問題了,這就是const修飾帶來的好處,但是聰明的人會在輸出的時候發現一個問題,就是a和test的值的輸出不同,按照最先說的道理應該可以改變a的值呀,為什麼在這裡卻有沒有能夠改變呢?

  道理是這樣的,const修飾過後的引用在編譯器內部是這樣進行變化的。

int a=10;
const double &test = a + 1.2f;

  這樣的一段代碼在編譯器認為卻是下面的方式進行的

int a=10;
int temp = a;
const double &test = temp + 12.f

  這裡其實是把a的值賦給了一個臨時temp 變數,而後test獲得的卻是temp+12.f 改變的是temp而不是a,所以就出現了a和test顯示的值不同的情況,這裡要特別注意,這是一個很容易混淆的地方,在編寫程式的時候要特別仔細,以免出現了問題卻檢查不出為什麼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.