C++淺析引用的定義與使用
解釋引用
首先我們先來看一個引用的例子
int main()
{
int a = 10;
int& Bin = a;
cout << a << endl;
cout << Bin << endl;
cout << &a << endl;
cout << &Bin << endl;
}
對于一個int型函數(shù)a,我們對a進行了引用,引用的新int函數(shù)叫Bin。
由他們是同一個地址可以知道,引用其實就是對同一個地址的函數(shù),換了一個新的叫法。
相當于《水滸傳》中,李逵在江湖上人稱黑旋風
那么這里int a就相當于李逵,而int&Bin就相當于黑旋風。
你使用李逵和黑旋風,他都會答應(yīng),這也就相當于起外號
如下:
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;
這是錯誤的
引用的作用
非常經(jīng)典的引用就是交換兩個數(shù)的值。
這是我們c語言的交換,這里形參不改變實參
void test1(int a,int b)//a,b不改變,因為a,b的生命周期只在swap函數(shù)內(nèi),結(jié)束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)//使用指針,交換地址實現(xiàn)數(shù)字變換
{
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是實參的別名,相當于對實參的調(diào)用
{
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并不是一個空間,只是一個數(shù),這是錯誤的引用
關(guān)于局部變量的引用
int& test2()
{
int b = 10;
return b;
}
void test1()
{
int &a = test2();
cout << a << endl;
}
int main()
{
test1();
}按照常理,這里test2中的b出了test2應(yīng)該作為局部變量被回收,但是

我們依然能得到正確答案,這是因為編譯器有對這種情況進行優(yōu)化,但是僅限一次
如果我們這樣
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();
}多調(diào)用幾次打印

就會發(fā)現(xiàn)除了第一次是正常的,其余都是亂碼。
注:如果實在是要這樣搞,就加上靜態(tài)變量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();
}
到此這篇關(guān)于C++淺析引用的定義與使用的文章就介紹到這了,更多相關(guān)C++引用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++中map和vector作形參時如何給定默認參數(shù)?
今天小編就為大家分享一篇關(guān)于C++中map和vector作形參時如何給定默認參數(shù)?,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04
C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向深扒
這篇文章主要介紹了C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向,整個Cartographer源碼閱讀是很枯燥的, 但絕對是可以學到東西的,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-03-03
創(chuàng)建二叉樹 二叉樹如何刪除節(jié)點操作教程
本文將詳細介紹二叉樹的創(chuàng)建,節(jié)點刪除,節(jié)點增加等一系列操作方法,需要的朋友可以參考下2012-12-12
C++中結(jié)構(gòu)體的類型定義和初始化以及變量引用
這篇文章主要介紹了C++中結(jié)構(gòu)體的類型定義和初始化以及變量引用,是C++入門學習中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09
C++的STL中accumulate函數(shù)的使用方法
這篇文章主要介紹了C++的STL中accumulate的使用方法,accumulate作用是累加求和即自定義類型數(shù)據(jù)處理,下文具體的操作方法需要的小伙伴可以參考一下2022-03-03

