引用(&)與常量(const)
阿新 • • 發佈:2019-01-30
開門見山,C++中有三個東西,分別叫做:引用,常量,常量引用。下面闡述三者各自的語法和聯絡。
撇去什麼string型別的引用不談,舉最簡單的例子吧(int型別)。
1.引用
比如對int型別的引用如下:
int a=1;
int &b=a;
這裡定義了一個(普通)引用 b ,它所指向的是int型別,所以可以把int型別的變數賦給它。
因此這樣做是錯的:
int &b=1;//b所指向的是int型別的變數,不是字面量
int &b;//b作為引用必須初始化,它不能脫離實際變數而存在
但是可以通過引用改變它所指向的變數:
int &b=a; b=3;//a,b的值同時變成了3
嗯,好像對於引用就這麼多性質。
個人感覺:引用就像是一個指標,它可以改變指向變數的值,換句話說引用是變數的另一個名字,引用的使用承擔了指標的一部分功能,而且更加實用和簡潔。
附:(指標實現上述功能程式碼)
int a=1;
int *b=&a;//取地址
*b=3;//a,*b同時變成3
2.常量
同樣常量也必須初始化:
const int a=1;//如果不初始化,a的初值就會變成垃圾值而且無法修改
const int c=f();//初始化可以是一個表示式或函式,而引用則不行
一旦初始化以後,const所確定的值真正實現了無法修改(不然為什麼叫常量....)
錯誤示例:
int *b=a;//錯誤,引用可以修改,這樣做意味著a可以修改,而a是一個const型別的值
3.常量引用
這兩個東西結合起來便有了這樣的產物:
int a=1;
int f(){}
const int c=1;
const int &b=a或者f()或者c或者3;//可以初始化為一個int,const int,函式及表示式,字面量的值,但必須初始化
繼承了引用和常量的特色,這產物似乎變得高階起來,連初始化都很強大呢(但不可以修改值QAQ)