一、引用的概念
引用是C++中的一種數據類型,它相當於給變量起了個別名。引用的聲明類似於指針,但是引用與指針有兩個顯著的不同點:
- 引用必須被初始化
- 引用不可以為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-hant/n/200767.html