C++淺析引用的定義與使用
解釋引用
首先我們先來看一個引用的例子
int main() { int a = 10; int& Bin = a; cout << a << endl; cout << Bin << endl; cout << &a << endl; cout << &Bin << endl; }
對於一個int型函數a,我們對a進行瞭引用,引用的新int函數叫Bin。
由他們是同一個地址可以知道,引用其實就是對同一個地址的函數,換瞭一個新的叫法。
相當於《水滸傳》中,李逵在江湖上人稱黑旋風
那麼這裡int a就相當於李逵,而int&Bin就相當於黑旋風。
你使用李逵和黑旋風,他都會答應,這也就相當於起外號
如下:
int main() { int a = 10; int& Bin = a; Bin += 10; cout << a << endl; cout << Bin << endl; cout << &a << endl; cout << &Bin << endl; }
可以看到我們這裡是對Bin進行操作,但是a的值也改變瞭。
同時我們也可以多個引用,可以給引用再引用(給外號再起外號)
int main() { int a = 10; int& Bin = a; int& Tian = a; int& Wei = Bin; cout << a << endl; cout << Bin << endl; cout << Tian << endl; cout << Wei << endl; cout << &a << endl; cout << &Bin << endl; cout << &Tian << endl; cout << &Wei << endl; }
可以看到值和地址還是相同。
註意:引用必須同等類型
int a=10;
double&b=a;
這是錯誤的
引用的作用
非常經典的引用就是交換兩個數的值。
這是我們c語言的交換,這裡形參不改變實參
void test1(int a,int b)//a,b不改變,因為a,b的生命周期隻在swap函數內,結束swap後a,b就消失,不改變實參 { int tmp = a; a = b; b = tmp; } int main() { int a = 1; int b = 2; test1(a, b); cout << a << " " << b << endl; }
然後我們學習瞭指針後,知道能直接交換地址
void test2(int* a, int *b)//使用指針,交換地址實現數字變換 { int tmp = *a; *a = *b; *b = tmp; } int main() { int a = 1; int b = 2; test2(&a,&b); cout << a << " " << b << endl; }
然後這是引用,引用是實參的外號,我們這裡修改,是對實參的直接修改
void test3(int& a, int& b)//使用引用,a,b是實參的別名,相當於對實參的調用 { int tmp = a; a = b; b = tmp; } int main() { int a = 1; int b = 2; test3(a, b); cout << a << " " << b << endl; }
註意:我們這裡的引用都必須是合法的空間
Int &a = 10;//10並不是一個空間,隻是一個數,這是錯誤的引用
關於局部變量的引用
int& test2() { int b = 10; return b; } void test1() { int &a = test2(); cout << a << endl; } int main() { test1(); }
按照常理,這裡test2中的b出瞭test2應該作為局部變量被回收,但是
我們依然能得到正確答案,這是因為編譯器有對這種情況進行優化,但是僅限一次
如果我們這樣
int& test2() { int b = 10; return b; } void test1() { int& a = test2(); cout << a << endl; cout << a << endl; cout << a << endl; cout << a << endl; } int main() { test1(); }
多調用幾次打印
就會發現除瞭第一次是正常的,其餘都是亂碼。
註:如果實在是要這樣搞,就加上靜態變量Static。
int& test2() { static int b = 10; return b; } void test1() { int& a = test2(); cout << a << endl; cout << a << endl; cout << a << endl; cout << a << endl; } int main() { test1(); }
到此這篇關於C++淺析引用的定義與使用的文章就介紹到這瞭,更多相關C++引用內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!