好久沒更了,紀念我的日語n5上冊書學成,更一篇博文。(甚是開心!!)
在現代c++中,僅當引數為const引用時,如果實參與引用引數不匹配,c++將生成臨時變數。詳細說來生成臨時變數有兩種情況:
實參的型別正確,但不是左值實參的型別不正確,但可以轉換為正確的型別
ps1.左值引數是可被引用的資料物件,例如變數、陣列元素、結構成員、引用和解除引用的指標。非左值包括字面常量(用引號引起的字串除外,它們由其位址表示)和包含多項的表示式。
ps2.字面常量 包括:整形常量,字元型常量,字串常量。注意: 不存在 陣列常量,結構體常量等結構型的 字面常量 。
ps3.現在常規變數和const變數都可視為左值。常規變數屬於可修改的左值,const變數屬於不可修改的左值。
舉個栗子說明一下:
double
cube
(const
double
&ra)
double side=
3.0;
double
*pd=
&side;
double
&rd=side;
double c1=
cube
(side)
;double c2=
cube
(side+
10.0);
double c3=
cube
(7.0)
這是一段示例**。
在**中,side,*pd,rd是有名稱,double型別的資料物件,因此可以直接為其建立引用,不需要臨時變數。
7.0和side+10.0雖然型別正確,但它們沒有名稱。此時編譯器將會生成乙個臨時匿名變數,並讓ra指向他。這個臨時變數只在cube函式執行期內存在,函式執行結束後便會被編譯器刪除。
後話:現代的c++學習推薦將引用引數宣告為const資料的裡理由有三:
使用const可以避免無意中修改資料的程式設計錯誤
使用const能夠處理const和非const實參,否則將只能接收非const資料
使用const引用使函式能夠正確生成並使用臨時變數
C const引用 臨時變數 引用引數
c 引用 臨時變數 引用引數和const引用 如果實參與引用引數不匹配,c 將生成臨時變數。如果引用引數是const,則編譯器在下面兩種情況下生成臨時變數 實參型別是正確的,但不是左值 實參型別不正確,但可以轉換為正確的型別 左值引數是可被引用的資料物件,例如,變數 陣列元素 結構成員 引用和被解除...
C const引用 臨時變數 引用引數
臨時變數 引用引數和const 如果實參與引用引數不匹配,c 將生成臨時變數。現在,僅當引數是const引用,c 才允許這樣做,這是乙個新的機制。在下面這兩種情況下,c 編譯器將生成臨時變數 實參型別是正確的,但不是左值 實參型別不正確,但可以轉換為正確的型別 左值引數是可被引用的資料物件,例如,變...
引用 const引用和非const引用
引用構造了物件的乙個同義詞,是c 物件的另乙個名字。在實際程式中,引用的主要作用是作函式的形參。引用是一種復合型別1,它通過在變數名前新增 來定義。在使用引用的情況下,每一種引用型別都關聯到某一其他型別。c 不能定義引用型別的引用,但是可以定義任何其他型別的引用。int a 100 int refa...