91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中的引用與關鍵字auto怎么使用

發布時間:2023-04-20 17:54:09 來源:億速云 閱讀:99 作者:iii 欄目:開發技術

這篇文章主要講解了“C++中的引用與關鍵字auto怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++中的引用與關鍵字auto怎么使用”吧!

    一.引用

    1.引用的概念

    引用就是給一個已經存在的變量取一個別名,與變量共用一段內存空間。注意引用的類型必須和變量類型相同,來演示下引用如何使用。

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int a = 1;
    	int& b = a;
    	int& c = b;
    	int& d = c;
    	
    	cout << &a << endl;
    	cout << &b << endl;
    	cout << &c << endl;
    	cout << &d << endl;
    
    	return 0;
    }

    如上面的代碼所示:我們給a取了個別名b,給b取別名c&hellip;也就是b是a的引用,c是b的引用&hellip;。其實b,c,d都代表著a,它們都共用著一塊內存空間。

    如下圖所示:

    C++中的引用與關鍵字auto怎么使用

    2.引用的使用和問題

    引用的注意事項:

    • 引用必須初始化

    • 引用不能更改

    • 一個變量可以有多個引用

    引用可以作為函數的參數也可以做返回值,在之前學習C語言我們常使用指針傳參,也就是傳址調用來改變外部變量的值。學習引用后,我們只用引用傳參就會特別方便。

    當返回引用時,就會引出很多問題,這里我們來解析下下面的代碼:

    int& Add()
    {
    	int n = 0;//靜態變量static int a = 0;
    	n++;
    
    	return n;
    }
    
    int main()
    {
    	int ret=Add();
    	cout << ret << endl;
    	return 0;
    }

    n在Add函數中變為1,Add返回了n的引用,我們用變量ret來接收n的引用也就是n的值,但是有個問題就是&mdash;&mdash;n在出Add函數后,函數棧幀如果被清理的話,函數返回引用找到的值就會是隨機值。如果棧幀沒有被清理,那ret僥幸是正確的1。為了避免這種情況我們可以將Add函數的n設為靜態變量。

    為了驗證,我們再看一下面的代碼:

    int& Add(int x)
    {
    	int n = x;
    	n++;
    	return n;
    }
    
    int main()
    {
    	int& ret=Add(10);
    	cout << ret << endl;
    
    	Add(20);
    	rand();
    	cout << ret << endl;
    	return 0;
    }

    假設出Add函數后棧幀不破壞那打印結果就是11\n21,但是我們調用個函數,模擬函數棧幀破壞的情況,那結果是不是像我們預想的那樣為隨機值呢。

    C++中的引用與關鍵字auto怎么使用

    總結

    引用傳參適合大部分的情況

    將引用返回值時需要注意引用對象還是否出函數是否還存在。

    下面我們來看引用使用場景及其優點:

    1.引用做參數-(輸出型參數)

    2.引用做參數-(減少拷貝提高效率) (大對象/深拷貝類對象)

    3.引用做返回值-(減少拷貝提高效率) (大對象/深拷貝類對象)

    4.引用做返回值-修改返回值+獲取返回值

    接下來再講一下常引用、引用權限的放大、縮小、平移:

    int func()
    {
    	stctic int a=0;
    	a++;
    	return a;
    }
    int main()
    {
    	//引用的權限可以平移和縮小不可以放大
    	int a = 0;
    	int& b = a;//平移
    	const int& c = a;//縮小
    	++a;
    	++c;//放大
    
    
    	const int a = 10;
    	int& b = a;//只能給變量取別名
    
    	double c = 3.14;
    	int& d = c;//引用的類型需要匹配
    	const int& e = c;//類型轉換會創建臨時變量 臨時變量具有常量性質
    
    	int& ret=func();//權限放大
    	return 0;
    }

    語法層面上引用不會開空間知識對變量取得一個別名,而從底層匯編指令來看的話引用是類似指針的方式使用的。

    3.引用與指針的比較

    引用和指針有許多不同點:

    • 引用需要初始化,指針不要求

    • 引用不能修改,指針可以

    • 有空指針,沒有空引用

    • 引用更為安全,指針可能出現野指針和越界等情況

    • 在sizeof中引用是類型的字節大小,指針是根據機器位數來判斷字節個數

    • 引用在語法上定義一個變量的別名,指針儲存一個變量的地址

    • 有多級指針沒有多級引用

    • 指針需要根據地址解引用訪問,引用是編譯器自己處理的

    二.關鍵字auto

    auto可以自動識別類型,當類型過于復雜冗長時,auto使用起來非常的方便。

    int main()
    {
        int a = 1;
        auto b = 10;
        auto c = 3.14;
    }

    在同一行定義多個變量時,需要注意同一行的變量類型要一致,不然auto無法正確識別:

    int main()
    {
        auto a = 1, b = 2; 
         auto c = 3, d = 4.0;//類型不同
    }

    auto還不能作為函數的參數以及定義數組

    auto還有個重要的應用范圍for循環

    他提供了一種更簡便的for遍歷的方法根據冒號”:”分為兩部分:第一部分是范圍內用于迭代的變量,第二部分則表示迭代的范圍。

    int main()
    {
    
    	int arr[] = { 0,1,2,3,4,5,6 };
    
    	for (auto x : arr)
    		cout << x << endl;
    }

    感謝各位的閱讀,以上就是“C++中的引用與關鍵字auto怎么使用”的內容了,經過本文的學習后,相信大家對C++中的引用與關鍵字auto怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    藁城市| 姚安县| 石狮市| 西吉县| 黎平县| 江安县| 绥棱县| 思南县| 图们市| 铅山县| 牟定县| 和林格尔县| 上杭县| 丹巴县| 威宁| 普兰店市| 石渠县| 周至县| 绥滨县| 淅川县| 伊宁县| 台东市| 乌海市| 虎林市| 安新县| 黎城县| 民乐县| 油尖旺区| 大荔县| 昭平县| 汕头市| 肥西县| 永定县| 镇原县| 巩义市| 呼伦贝尔市| 九寨沟县| 兴国县| 勐海县| 翁牛特旗| 兖州市|