C++下的引用類型(C++入門)

引用類型也稱別名,它是個很有趣的東西。在c++ 下你可以把它看作是另外的一種指針,通過引用類型我們同樣也可以間接的操作對象,引用類型主要是用在函數的形式參數上,通常我們使用它是把類對象傳遞給一個函數。 引用對象採用類型名加上&符號和名稱的方式進行定義。例如:(int &s;),這裏我們就定義了一個int類型的名爲s 的引用,但是int &s;這樣的方式是不能夠被編譯成功的,因爲引用的定義必須同時給應用進行賦值操作,這裏的賦值並不是說把變量的值傳遞給引用,而是把引用指向變量,寫成這樣就對了:(int &s=變量名;)。

#include <iostream>  
using namespace std;  
  
void main(void)  
{  
  
int a=10;  
int &s=a;  
s=s+2;  
  
cout << &a << "|" << &s << "|" << a << "|" <<s<< endl;  
  
cin.get();  
} 

 
  觀察並編譯運行上面的代碼你會發現&a和&s的地址顯示是相同的,a和s的值顯示也是一樣的!
  結合前一個教程的內容我們來說一下const引用的相關內容,這裏要特別注意,和前一個教程一樣帶const修飾的引用同樣也容易混淆概念!

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

#include <iostream>  

using namespace std;  

void main(void)  

{  

int a=10;  

//double &s = a + 1.2f; //這句就是錯誤的!  

const double &s = a + 1.2f;  

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

cin.get();  

}

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

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

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


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

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


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章