1. 程式人生 > >引用(&)與常量(const)

引用(&)與常量(const)

開門見山,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)