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

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

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

一、前言

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

二、引用

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

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

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

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

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

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

引用一旦指向一個變量,就不能再指向其他變量,因為引用相當于變量的別名,若更換引用,實際上是給變量賦值。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

四、auto關鍵字

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

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

auto細節(jié)說明:

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

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

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

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)后的括號由冒號“ :”分為兩部分:第一部分是范圍內用于迭代的變量,第二部分則表示被迭代的范圍。

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

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

六、結語

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

相關文章

  • Visual Studio 2019 Professional 激活方法詳解

    Visual Studio 2019 Professional 激活方法詳解

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

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

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

    C語言實現(xiàn)學生學籍管理系統(tǒng)課程設計

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

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

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

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

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

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

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

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

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

    關于Dev-C++安裝及使用方式

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

    C語言 從根本上理解指針

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

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

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

最新評論