2015-04-06 37 views
2

在大約在C++中的引物第5版常數引用的部分,有這種小例子塊:C++ const引用允許從表達式中進行更改?

int i = 42; 
const int &r1 = i; // we can bind a const int& to a plain int object 
const int &r2 = 42; // ok: r1 is a reference to const 
const int &r3 = r1 * 2; // ok: r3 is a reference to const 
int &r4 = r * 2; // error: r4 is a plain, non const reference 

在第四行,我只是好奇,以恆定的基準的恆定的參考如何能夠成功地將值乘以2.當r1引用i時,不會發生轉換,從而使所有內容保持不變?或者是第4行中的表達式是否獨立於r3?

+1

const引用總是可以綁定到文字...這就是爲什麼很多函數參數都是const引用 – texasbruce 2015-04-06 01:09:19

回答

3

在這一行

const int& r3 = r1 * 2; 

創建臨時int並從初始化表達式r1 * 2複製初始化,則r3綁定到暫時的。這不會修改r1的引用,而不是評估3 * 2修改3

+1

請注意,臨時左值具有與引用相同的生命週期 – texasbruce 2015-04-06 01:12:20