分情況討論: 非const引用非const: 非同類型不能引用 非const引用const: 不能通過編譯。因為要引用,說明你要改值。。 const引用非const: 第一種情況:const引用與非const同類型。 很奇怪,這是可以通過編譯的!而且,const能變化值!(原因是引用並沒有綁定臨時值 ...
分情況討論:
非const引用非const:
非同類型不能引用非const引用const:
不能通過編譯。因為要引用,說明你要改值。。
const引用非const:
第一種情況:const引用與非const同類型。
很奇怪,這是可以通過編譯的!而且,const能變化值!(原因是引用並沒有綁定臨時值,而引用只管從不從自身修改,不管指向地址的修改),不過,這也就是說const那邊改了是要報錯的。
第二種情況:const引用與非const不同類型。
請參考第二種情況下的圖片。因為編譯器為了類型的匹配,要創建一個臨時量,所以更改被引用的變數的值並不會導致臨時量的變化。
const引用const:
這裡情況就有點複雜了。
先設置這種情況是const a 引用 const b;
如果const b是一個變數,而不是一個常數或表達式,那麼:
如果const a 的類型與const b相同:
因為類型相同,所以編譯器並不會創建臨時量。所以同理
如果const a 的類型與const b不相同:
因為會創建臨時量,所以。。
如果const b是一個常數或表達式,而不是一個變數,那麼:
首先提醒:c非常量引用常數的情況是不被允許的。(見情況二下的圖片)
這是由於臨時量。(又是它。。)
(見情況二下的圖片。。)
值得註意的是,在這種情況下(也就是右邊不是變數的情況下),無論如何,都會創建臨時量。
END.