我理解引用變量的概念。這是另一個變量的別名。用例引用常量變量
int varA = 100;
int &varB = varA;
這裏varB
是指varA
,都指向同一個存儲位置。一個變量的變化反映在另一個變量中。
問:
一)
int &c = 100;
什麼是上述聲明的含義,以及它是如何從下面的有什麼不同?
二)int c = 100;
是否有一個地方,我們需要使用任何方案1(A),而不是圖1(b)?
我理解引用變量的概念。這是另一個變量的別名。用例引用常量變量
int varA = 100;
int &varB = varA;
這裏varB
是指varA
,都指向同一個存儲位置。一個變量的變化反映在另一個變量中。
問:
一)int &c = 100;
什麼是上述聲明的含義,以及它是如何從下面的有什麼不同?
二)int c = 100;
是否有一個地方,我們需要使用任何方案1(A),而不是圖1(b)?
所有是正確的,但這樣的:
int &c = 100; //error
它都將在C++ 03和C++ 11給出編譯錯誤。這是因爲它試圖將非const引用綁定到不允許的臨時對象(創建於100
之外)。
在C++ 11,你可以這樣做,但是:
int && c = 100; //ok
它被稱爲右值引用。
你可以結合const的(無論是在C++ 03,和C++ 11)引用到臨時雖然:
int const & c = 100;
-
int c = 100;
它簡單地定義了一個對象稱爲c
並用100
初始化它。這裏沒有參考。
int &c = 100
是無效的代碼,你不能綁定一個非const引用臨時。
要使其有效,你需要一個const
參考:
const int &c = 100;
雖然,
int c = 100
是合法的代碼。它創建一個名稱爲c
的變量int
並使用100
對其進行初始化。
int& i = 100;
違法。
是合法的說:
int const& i = 100;
const int& i = 100; // same as above
在這方面不是特別有用,但它需要爲函數的目的工作電話:
void foo(int const& i) { ... }
...
foo(100);
如果你嘗試編譯圖1(a) ,那麼你會明白爲什麼1(b)更好。 –
有沒有人有方便的Visual C + +? 1(a)在那裏編譯?如果我記得,它允許將非const引用綁定到臨時對象。 –
@BenjaminLindley它沒有。 –