今天讀到《C++ Primer》第五版第2.4.1節(jié) References to const 講到了引用和被引用的對象類型必須匹配的第一個例外,就是有const關(guān)鍵字存在的情況座咆。書中是這樣描述的:
The first exception is that we can initialize a reference to const from any expression that can be converted to the type of the reference
后面舉了一個例子:
double dval = 3.14;
const int &ri = dval;
當(dāng)將引用綁定到與當(dāng)前引用類型不同的一個對象時吠勘,編譯器做了如下操作:
const int temp = dval;
const int &ri = temp;
也就是用一個臨時變量存儲類型轉(zhuǎn)換后的值售碳。
如果編譯器允許這種寫法int &ri = dval;
那么ri = 3;
只會使得臨時變量的值發(fā)生變化换团,并不會影響dval
的值眠砾,所以這樣操作是沒有意義的疮装,結(jié)果是編譯器判定這樣的寫法為非法喻频。結(jié)論是對于引用類型和被引用對象類型不一致的情況(前提是可相互轉(zhuǎn)換)缩宜,必須使用const
關(guān)鍵字。