C++引用的妙用

一、引用的概念

引用是C++中的一種數據類型,它相當於給變量起了個別名。引用的聲明類似於指針,但是引用與指針有兩個顯著的不同點:

  1. 引用必須被初始化
  2. 引用不可以為NULL

除此之外,引用與指針的功能類似,可以作為函數參數、返回值和變量。

#include <iostream>

int main() {
    int a = 10;
    int& b = a; // 定義b為a的引用
    b++;
    std::cout << "a = " << a << std::endl; // 輸出 a = 11
    return 0;
}

在上面的代碼中,b是a的引用,對b的改變會直接影響到a。

二、函數參數中的引用

函數參數中傳遞引用,可以避免拷貝大數據結構帶來的時間和空間上的浪費。

#include <iostream>
#include <vector>

void add_10(std::vector<int>& vec) { // 使用引用傳遞vector
    for(auto& i : vec) { // 使用引用遍歷vector
        i += 10;
    }
}

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    add_10(vec);
    for(const auto& i : vec) { // 使用const引用遍歷vector
        std::cout << i << " "; // 輸出 11 12 13 14 15
    }
    return 0;
}

在上面的代碼中,add_10函數使用引用傳遞vector,add_10內部對vector的修改會直接影響到函數外部傳入的vector。

三、返回值中的引用

函數返回引用,效率高,可以直接修改被返回的變量。

#include <iostream>

int& max(int& a, int& b) { // 返回引用類型
    return a > b ? a : b;
}

int main() {
    int a = 10, b = 20;
    max(a, b) = 100; // 直接修改被返回的變量
    std::cout << "a = " << a << ", b = " << b << std::endl; // 輸出 a = 10, b = 100
    return 0;
}

在上面的代碼中,max函數返回a和b中較大的一個,使用max(a, b) = 100直接修改被返回的變量b的值。

四、引用的實現原理

引用的實現原理是編譯器為每個引用變量創建一個指針變量,這個指針變量指向其所表示的變量。

#include <iostream>

int main() {
    int a = 10;
    int& b = a; // 定義b為a的引用
    int* p = &a; // 定義p為a的地址

    std::cout << "a = " << a << std::endl;
    std::cout << "b = " << b << std::endl;
    std::cout << "*p = " << *p << std::endl;

    b = 20; // 修改b的值,a也會被修改
    std::cout << "a = " << a << std::endl;
    std::cout << "b = " << b << std::endl;
    std::cout << "*p = " << *p << std::endl;
    return 0;
}

在上面的代碼中,使用指針p修改a的值,b也會被修改,因為b實際上是指向a的指針。

五、小結

引用是C++中非常重要的一種數據類型,它可以避免無謂的拷貝,提高程序效率,更重要的是提高了程序可讀性。

引用可以被用於函數參數和返回值中,引用的內部實現是編譯器為每個引用變量創建一個指針變量。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/200767.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-05 20:03
下一篇 2024-12-06 11:28

相關推薦

  • CSS下一個兄弟元素的妙用

    一、優雅地選擇元素 CSS下一個兄弟元素指的是選中當前元素之後的兄弟元素。當我們需要執行某些動態樣式效果時,利用該選擇器可以更加優雅地選擇元素。 /*選中id為wrapper之後的…

    編程 2025-02-17
  • Python字典values的妙用:從獲取數據到操作元素

    一、獲取所有values 獲取字典的所有values十分簡單,只需要使用字典的values()方法即可。 a_dict = {‘a’: 1, ‘b’: 2, ‘c’: 3} val…

    編程 2025-01-14
  • Python字典的妙用——實現數據的快速讀取和操作

    一、字典基礎知識 Python字典是一種可變容器模型,可以存儲任意數量的Python對象,每個對象都是通過一個唯一的鍵來進行訪問。字典的本質是一個哈希表,鍵值對存儲在其中。因為其內…

    編程 2025-01-07
  • Python中elif in的妙用

    一、基本用法 在Python中,elif in是一種特殊的語法,用於檢查一個變量是否包含在一個列表或元組中,代碼示例: colors = [‘red’, ‘blue’, ‘gree…

    編程 2025-01-03
  • Python控制語句:elif的妙用

    Python是一門易學易用的編程語言,它擁有非常強大的控制語句,其中之一就是elif語句。elif語句是if語句的衍生,它可以讓代碼更加簡潔高效。 一、elif語句的作用 當if語…

    編程 2025-01-02
  • 優雅退出:Python break語句的妙用

    一、break語句的基本使用 Python中的break語句用於在循環中提前跳出,結束當前循環。它可以用於for循環和while循環,語法如下: for 變量 in 序列: if …

    編程 2024-12-26
  • 函數重載的妙用

    一、什麼是函數重載 在C++中,函數重載是指在同一作用域內,函數名稱相同而參數列表不同的情況下,編譯器會自動根據不同的參數類型和個數進行區分,生成不同的函數。 例如下面是兩個同名函…

    編程 2024-12-23
  • Python字典操作利器:dict.get的妙用

    Python中的字典是一種非常重要的數據結構,它提供了一種鍵值對的映射關係。在實際應用中,我們常常需要根據鍵來查詢對應的值。讀者對字典的get()方法可能比較熟悉,但可能並不知道g…

    編程 2024-12-22
  • 結束循環:Python中的break語句的妙用

    一、break語句的基本用法 在編寫Python程序時,我們經常需要對循環進行控制。break語句可以在循環體內提前結束循環,即跳出循環體。 # 示例代碼1 for i in ra…

    編程 2024-12-22
  • 解密:註冊中心的妙用

    一、註冊中心是什麼 註冊中心是一個分佈式系統中的關鍵組成部分,它可以統一管理服務的註冊與發現,用於解決分佈式系統中服務間的相互調用問題。通過中心化管理,可以對服務的註冊和下線進行管…

    編程 2024-12-21

發表回復

登錄後才能評論