亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++中引用、內(nèi)聯(lián)函數(shù)、auto關(guān)鍵字和范圍for循環(huán)詳解

 更新時(shí)間:2023年02月10日 10:51:15   作者:藍(lán)色學(xué)者i  
本文主要梳理了C++當(dāng)中一些瑣碎的知識點(diǎn),包括有命名空間,缺省參數(shù),引用,auto關(guān)鍵字和內(nèi)聯(lián)函數(shù),文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一、前言

大家好久不見,這篇文章帶大家學(xué)習(xí)一下C++中的引用和內(nèi)聯(lián)函數(shù)

二、引用

引用變量是一個別名,也就是說,它是某個已存在變量的另一個名字,舉個例子,李逵有很多外號,這些外號都是指李逵這一個人,因此這些外號都是他的引用!

一旦把引用初始化為某個變量,就可以使用該引用名稱或變量名稱來指向變量。

在C++中,我們用int(數(shù)據(jù)類型)& +引用名稱(b) = 變量名稱(a) 來表示b是a的 一個 別名,別名當(dāng)然可以有很多個!

如圖,b是a的別名,因此a和b的值、地址全部都一致。

引用與指針不同,引用必須指向已經(jīng)存在的變量,必須賦值,即不能出現(xiàn)如下寫法:

int& b; //空引用‘b' ?
int* b; //空指針'b‘ ??

引用一旦指向一個變量,就不能再指向其他變量,因?yàn)橐孟喈?dāng)于變量的別名,若更換引用,實(shí)際上是給變量賦值。

想要把b改為c的別名,但事實(shí)上,b仍然是a的別名,指向同一塊空間,只是這塊空間的值被改為了c的值

總結(jié)一下,C++中引用一共有三個特性:

  • 引用在定義時(shí)必須初始化
  • 一個變量可以有多個引用
  • 引用一旦引用一個實(shí)體,再不能引用其他實(shí)體

引用作為一種數(shù)據(jù)類型,是既可以作為參數(shù)傳遞,也可以作為返回值返回,我們重點(diǎn)討論一下傳值返回和傳引用返回。

??作用范圍:傳引用返回只能在空間不會隨函數(shù)結(jié)束而銷毀的情況,傳值返回可以函數(shù)結(jié)束銷毀的適合返回。

??使用效率:正是由于傳值返回返回變量的臨時(shí)拷貝,所以傳引用返回會帶來性能上的提升,但有些時(shí)候是 不可以傳引用返回的,如果你將一塊棧上的空間返回了別名,會引發(fā)嚴(yán)重的錯誤

引用與指針功能類似,又有很多不同:

  1. 引用概念上定義一個變量的別名,指針存儲一個變量地址。
  2. 引用在定義時(shí)必須初始化,指針沒有要求
  3. 引用在初始化時(shí)引用一個實(shí)體后,就不能再引用其他實(shí)體,而指針可以在任何時(shí)候指向任何一個同類型實(shí)體
  4. 沒有NULL引用,但有NULL指針
  5. 在sizeof中含義不同:引用結(jié)果為引用類型的大小,但指針始終是地址空間所占字節(jié)個數(shù)(32位平臺下占4個字節(jié))
  6. 引用自加即引用的實(shí)體增加1,指針自加即指針向后偏移一個類型的大小
  7. 有多級指針,但是沒有多級引用
  8. 訪問實(shí)體方式不同,指針需要顯式解引用,引用編譯器自己處理
  9. 引用比指針使用起來相對更安全

三、內(nèi)聯(lián)函數(shù)

以inline修飾的函數(shù)叫做內(nèi)聯(lián)函數(shù),編譯時(shí)C++編譯器會在調(diào)用內(nèi)聯(lián)函數(shù)的地方展開,沒有函數(shù)調(diào)用建立棧幀的開銷,內(nèi)聯(lián)函數(shù)提升程序運(yùn)行的效率。

//內(nèi)聯(lián)函數(shù)的格式
inline int Add(int x,int y)
{
	return x+y;
}

內(nèi)聯(lián)函數(shù)與C語言宏相似,因此也是一種空間換時(shí)間的做法,雖然能夠提高運(yùn)行效率,但會讓目標(biāo)文件變大。

與C語言宏不同,內(nèi)聯(lián)函數(shù)支持調(diào)試,并且可以規(guī)避C語言宏的一系列問題。

#define Add(a,b) ((a)+(b))

如果上述宏少寫括號都會引發(fā)嚴(yán)重的問題,與乘法結(jié)合之類的問題就會頻出,內(nèi)聯(lián)函數(shù)很好的解決了這個問題。

內(nèi)聯(lián)函數(shù)定義和聲明在一起!因?yàn)閕nline就沒有函數(shù)地址了,鏈接無法找到這個函數(shù)!聲明和定義都在類中的函數(shù)也被認(rèn)為是內(nèi)聯(lián)函數(shù),因此簡短的函數(shù)適合將聲明和定義都放在類內(nèi)聲明和定義。

四、auto關(guān)鍵字

auto是C++11新增的一個關(guān)鍵字,能夠自動推導(dǎo)變量類型,與C語言中typedef的功能類似。

但需要注意,使用auto定義變量時(shí)必須初始化,否則無法通過編譯在編譯階段編譯器需要根據(jù)初始化表達(dá)式來推導(dǎo)auto的實(shí)際類型。因此auto并非是一種“類型”的聲明,而是一個類型聲明時(shí)的“占位符”,編譯器在編譯期會將auto替換為變量實(shí)際的類型。

auto細(xì)節(jié)說明:

1、可以自動推導(dǎo)出auto為指針類型,但不能推導(dǎo)引用,因此引用類型只能加&

auto  a = &A;
auto* b = &A;
auto& c =  A;

2、在同一行使用auto時(shí)必須保證都是同一類型,編譯器只推導(dǎo)第一個類型,然后將類型給與其他變量

auto a = 10,b=20,c=30;√
auto a = 10,b='a';    X

3、auto不能聲明數(shù)組,也不可以作為函數(shù)的參數(shù)

int func(auto x){};   X
auto arr[200];        X

五、范圍for循環(huán)

對于有范圍的數(shù)組,范圍for循環(huán)能夠讓程序員更方便的遍歷數(shù)組

int arr[10] = {0,1,2,3,4,5,6,7,8,9};
for(int i = 0;i<sizeof(arr)/sizeof(arr[0]);i++)//傳統(tǒng)for循環(huán)
for(int e : arr) //范圍for循環(huán)

for循環(huán)后的括號由冒號“ :”分為兩部分:第一部分是范圍內(nèi)用于迭代的變量,第二部分則表示被迭代的范圍。

需要注意的是,e是臨時(shí)變量,更改時(shí)無法改變原數(shù)組,若要改變原數(shù)組,可以使用引用:

for(int& e : arr) //引用

六、結(jié)語

到此這篇關(guān)于C++中引用、內(nèi)聯(lián)函數(shù)、auto關(guān)鍵字和范圍for循環(huán)的文章就介紹到這了,更多相關(guān)C++引用、內(nèi)聯(lián)函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Visual Studio 2019 Professional 激活方法詳解

    Visual Studio 2019 Professional 激活方法詳解

    這篇文章主要介紹了Visual Studio 2019 Professional 激活方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • C++實(shí)現(xiàn)LeetCode(159.最多有兩個不同字符的最長子串)

    C++實(shí)現(xiàn)LeetCode(159.最多有兩個不同字符的最長子串)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(159.最多有兩個不同字符的最長子串),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計(jì)

    C語言實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 基于Matlab實(shí)現(xiàn)水波倒影特效的制作

    基于Matlab實(shí)現(xiàn)水波倒影特效的制作

    這篇文章主要介紹了如何利用Matlab制作出水波倒影的特效,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下
    2022-03-03
  • Qt?CEF融合技QCefView使用教程(推薦)

    Qt?CEF融合技QCefView使用教程(推薦)

    QCefView是一個與Chromium?Embedded?Framework集成的Qt第三方開源庫,LGPL許可,可以在項(xiàng)目中免費(fèi)使用,功能類似CEF、QWebEngineView,提供C++和web交互的能力,本文給大家介紹Qt?CEF融合技QCefView使用教程,感興趣的朋友參考下吧
    2021-12-12
  • C語言編程深入理解取整取余取模問題示例分析

    C語言編程深入理解取整取余取模問題示例分析

    這篇文章主要為大家介紹了C語言編程深入理解取整取余取模問題的示例分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • C++實(shí)現(xiàn)LeetCode(62.不同的路徑)

    C++實(shí)現(xiàn)LeetCode(62.不同的路徑)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(62.不同的路徑),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 關(guān)于Dev-C++安裝及使用方式

    關(guān)于Dev-C++安裝及使用方式

    這篇文章主要介紹了關(guān)于Dev-C++安裝及使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • C語言 從根本上理解指針

    C語言 從根本上理解指針

    C語言這門課程在計(jì)算機(jī)的基礎(chǔ)教學(xué)中一直占有比較重要的地位,然而要想突破C語言的學(xué)習(xí),對指針的掌握是非常重要的,本文將具體針對指針的基礎(chǔ)做詳盡的介紹
    2022-04-04
  • C語言實(shí)現(xiàn)超市管理系統(tǒng)

    C語言實(shí)現(xiàn)超市管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)超市管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評論