引用本質:引用的本質在 c++ 內部實現是一個指針常量。
代碼中?int& ref = a;
?可以理解為?int* const ref = &a;
(指針常量)。
指針常量:指針指向不可變(綁定?a
?后,不能再指向其他變量),但可以通過指針修改所指的值。
引用:本質是變量的 “別名”,操作引用就是直接操作原變量。
#include <iostream>
using namespace std;//發現是引用,轉換為 int* const ref = &a;
void func(int& ref) {ref = 100; // ref是引用,轉換為*ref = 100}
int main() {int a = 10;//自動轉換為 int* const ref = &a; 指針常量是指針指向不可改,也說明了為什么引用不可更改int& ref = a;ref = 20; //內部發現ref是引用,自動幫我們轉換為:*ref = 20;cout << "a:" << a << endl;cout << "ref:" << ref << endl;func(a);//調用函數func后cout << "a:" << a << endl;cout << "ref:" << ref << endl;return 0;
}
ref = 20;
表面是給引用?ref
?賦值,實際會自動轉換為?*ref = 20;
(修改?a
?的值)。此時?a
?變為?20
。
調用?func(a);
func
?中?ref = 100;
(參數?ref
?是引用),同樣轉換為修改原變量?a
?的值,a
?變為?100
。
初始?a = 10
,經?ref = 20;
?后?a
?變?20
,再經?func(a)
?中?ref = 100;
,最終?a
?為?100
。
代碼驗證:
?
?
?