關於C++引用的一些注意點

發表於2015-05-04

C++的引用首先跟指標的最大區別就是引用不是一個物件,而指標是一個物件;其次引用在其定義時就要初始化,而指標可以不用。

此時rval就繫結了val,其實就是rval就是val的一個別名。你修改了兩個其中的一個,其值都會改變。

因為引用在一開始就初始化了,所以一個引用只能引用一個變數。還有,引用只能引用物件,也就是有地址的,不能是一個常數或者表示式。而且型別要匹配。

 

References to const  常量引用

不同於非常量的引用,常量引用所引用的物件不能修改

因為ci是一個常量,所以我們不能直接用一個引用來引用ci,因為我們不能修改ci。

上面提到引用要引用正確的自身的型別,但是常量引用可以引用一個非const的物件,一個數,或者表示式。

讓我們想想這是為什麼?

其實編譯器幫我們多做了一步

正因為有這個無名的中轉存量,所以常量引用才可以引用數,表示式,還有不同型別的物件。

那為什麼非常量引用就不能這樣呢?

想想,剛才說的編譯器幫我們弄了一箇中轉物件,其實我們引用是引用它,修改也修改它, 但它是無名的,也就是找不到地址,也無法找著。修改了也沒用,我們是要修改dval(在上面列子中)。

所以說,只有常量引用才可以引用數字,表示式,不同型別的物件。因為我們不打算修改它,所以那個中轉變數真的只是負責傳遞值,讓常量引用初始化而已。

最後一個例子

這樣非常量引用和常量引用都引用一個值是可以的。非常量引用就不用說了,跟物件綁在一起,是別名,修改引用的同時也就修改了物件本身的內容。而常量引用,就是跟上面一樣,編譯器幫我們建立了一個無名的中轉變數來儲存,其實也就是賦值給常量物件初始化。你不能修改它就是了。

相關文章