欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++淺析引用的定義與使用

 更新時(shí)間:2022年07月08日 09:16:38   作者:幻荼  
引用是C++一個(gè)很重要的特性,顧名思義是某一個(gè)變量或?qū)ο蟮膭e名,對(duì)引用的操作與對(duì)其所綁定的變量或?qū)ο蟮牟僮魍耆葍r(jià),這篇文章主要給大家總結(jié)介紹了C++中引用的相關(guān)知識(shí)點(diǎn),需要的朋友可以參考下

解釋引用

首先我們先來(lái)看一個(gè)引用的例子

int main()
{
	int a = 10;
	int& Bin = a;
	cout << a << endl;
	cout << Bin << endl;
	cout << &a << endl;
	cout << &Bin << endl;
}

對(duì)于一個(gè)int型函數(shù)a,我們對(duì)a進(jìn)行了引用,引用的新int函數(shù)叫Bin。

由他們是同一個(gè)地址可以知道,引用其實(shí)就是對(duì)同一個(gè)地址的函數(shù),換了一個(gè)新的叫法。

相當(dāng)于《水滸傳》中,李逵在江湖上人稱(chēng)黑旋風(fēng)

那么這里int a就相當(dāng)于李逵,而int&Bin就相當(dāng)于黑旋風(fēng)。

你使用李逵和黑旋風(fēng),他都會(huì)答應(yīng),這也就相當(dāng)于起外號(hào)

如下:

int main()
{
	int a = 10;
	int& Bin = a;
	Bin += 10;
	cout << a << endl;
	cout << Bin << endl;
	cout << &a << endl;
	cout << &Bin << endl;
}

可以看到我們這里是對(duì)Bin進(jìn)行操作,但是a的值也改變了。

同時(shí)我們也可以多個(gè)引用,可以給引用再引用(給外號(hào)再起外號(hào))

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;
}

可以看到值和地址還是相同。

注意:引用必須同等類(lèi)型

int a=10;
double&b=a;
這是錯(cuò)誤的

引用的作用

非常經(jīng)典的引用就是交換兩個(gè)數(shù)的值。

這是我們c語(yǔ)言的交換,這里形參不改變實(shí)參

void test1(int a,int b)//a,b不改變,因?yàn)閍,b的生命周期只在swap函數(shù)內(nèi),結(jié)束swap后a,b就消失,不改變實(shí)參
{
	int tmp = a;
	a = b;
	b = tmp;
}
int main()
{
	int a = 1;
	int b = 2;
	test1(a, b);
	cout << a << " " << b << endl;
}

然后我們學(xué)習(xí)了指針后,知道能直接交換地址

void test2(int* a, int *b)//使用指針,交換地址實(shí)現(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;
}

然后這是引用,引用是實(shí)參的外號(hào),我們這里修改,是對(duì)實(shí)參的直接修改

void test3(int& a, int& b)//使用引用,a,b是實(shí)參的別名,相當(dāng)于對(duì)實(shí)參的調(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并不是一個(gè)空間,只是一個(gè)數(shù),這是錯(cuò)誤的引用

關(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àn)榫幾g器有對(duì)這種情況進(jìn)行優(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)用幾次打印

就會(huì)發(fā)現(xiàn)除了第一次是正常的,其余都是亂碼。

注:如果實(shí)在是要這樣搞,就加上靜態(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中map和vector作形參時(shí)如何給定默認(rèn)參數(shù)?

    C++中map和vector作形參時(shí)如何給定默認(rèn)參數(shù)?

    今天小編就為大家分享一篇關(guān)于C++中map和vector作形參時(shí)如何給定默認(rèn)參數(shù)?,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向深扒

    C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向深扒

    這篇文章主要介紹了C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向,整個(gè)Cartographer源碼閱讀是很枯燥的, 但絕對(duì)是可以學(xué)到東西的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-03-03
  • 創(chuàng)建二叉樹(shù) 二叉樹(shù)如何刪除節(jié)點(diǎn)操作教程

    創(chuàng)建二叉樹(shù) 二叉樹(shù)如何刪除節(jié)點(diǎn)操作教程

    本文將詳細(xì)介紹二叉樹(shù)的創(chuàng)建,節(jié)點(diǎn)刪除,節(jié)點(diǎn)增加等一系列操作方法,需要的朋友可以參考下
    2012-12-12
  • 運(yùn)用指針在不用加號(hào)的情況進(jìn)行加法運(yùn)算的講解

    運(yùn)用指針在不用加號(hào)的情況進(jìn)行加法運(yùn)算的講解

    今天小編就為大家分享一篇關(guān)于運(yùn)用指針在不用加號(hào)的情況進(jìn)行加法運(yùn)算的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • C++實(shí)現(xiàn)商品管理程序

    C++實(shí)現(xiàn)商品管理程序

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)商品管理程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++?繼承的范例講解

    C++?繼承的范例講解

    繼承是C++面向?qū)ο缶幊讨械囊婚T(mén)。繼承是子類(lèi)繼承父類(lèi)的特征和行為,或者是繼承父類(lèi)得方法,使的子類(lèi)具有父類(lèi)得的特性和行為。重寫(xiě)是子類(lèi)對(duì)父類(lèi)的允許訪問(wèn)的方法實(shí)行的過(guò)程進(jìn)行重新編寫(xiě),返回值和形參都不能改變。就是對(duì)原本的父類(lèi)進(jìn)行重新編寫(xiě),但是外部接口不能被重寫(xiě)
    2022-06-06
  • C語(yǔ)言return知識(shí)點(diǎn)總結(jié)

    C語(yǔ)言return知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于C語(yǔ)言return知識(shí)點(diǎn)總結(jié)內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • C++中結(jié)構(gòu)體的類(lèi)型定義和初始化以及變量引用

    C++中結(jié)構(gòu)體的類(lèi)型定義和初始化以及變量引用

    這篇文章主要介紹了C++中結(jié)構(gòu)體的類(lèi)型定義和初始化以及變量引用,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • 一波C語(yǔ)言字符數(shù)組實(shí)用技巧集錦

    一波C語(yǔ)言字符數(shù)組實(shí)用技巧集錦

    這篇文章主要介紹了一波C語(yǔ)言字符數(shù)組實(shí)用技巧集錦,包括許多字符的轉(zhuǎn)換與提取等基本操作示例,需要的朋友可以參考下
    2016-04-04
  • C++的STL中accumulate函數(shù)的使用方法

    C++的STL中accumulate函數(shù)的使用方法

    這篇文章主要介紹了C++的STL中accumulate的使用方法,accumulate作用是累加求和即自定義類(lèi)型數(shù)據(jù)處理,下文具體的操作方法需要的小伙伴可以參考一下
    2022-03-03

最新評(píng)論