2012-06-26 103 views
1

我理解引用變量的概念。這是另一個變量的別名。用例引用常量變量

int varA = 100; 
int &varB = varA; 

這裏varB是指varA,都指向同一個存儲位置。一個變量的變化反映在另一個變量中。

問:

  1. 一)int &c = 100;
    什麼是上述聲明的含義,以及它是如何從下面的有什麼不同?
    二)int c = 100;

  2. 是否有一個地方,我們需要使用任何方案1(A),而不是圖1(b)?

+6

如果你嘗試編譯圖1(a) ,那麼你會明白爲什麼1(b)更好。 –

+0

有沒有人有方便的Visual C + +? 1(a)在那裏編譯?如果我記得,它允許將非const引用綁定到臨時對象。 –

+0

@BenjaminLindley它沒有。 –

回答

3

所有是正確的,但這樣的:

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初始化它。這裏沒有參考。

+0

感謝所有的答覆。你提到我們可以綁定'const引用到臨時',在這種情況下,int const和c = 100之間有什麼區別;和const int c = 100? – Whoami

+0

一個是參考,其他不是。瞭解'&'的意義。實際上,這裏沒有太大區別(至少現在我想不出有什麼區別)。 – Nawaz

+0

Nawaz,可能我提出了不同的問題,哪種情況下可以使用const&c = 100?我理解的是:fun(const int&a),fun(123),然後臨時對象'123'不會被複制到堆棧中,而是從存儲'123'的數據段引用它。我的理解是否正確? – Whoami

2

1)int& c = 100;是非法的,而第二個不是。

我明白了參考變量的概念。

如果你真正理解引用,你希望你做c = 101不斷100後突然轉向101

2)沒有回答的問題,因爲1)是非法的。

+0

我的錯誤。我還沒有完全理解。 :)。 – Whoami

+0

@Whoami認爲引用是一個別名。一個暱稱。當你說'int&c = x'時,每當你寫'c'時,就像你在寫'x'。這對於一個常量的非常量引用無意義 - 「int&c = 100」,因爲你可以編寫「c = 101」,這將*轉化爲「100 = 101」,這顯然不會合理。 –

+0

true :)。感謝您的回覆:) – Whoami

3
int &c = 100 

是無效的代碼,你不能綁定一個非const引用臨時。

要使其有效,你需要一個const參考:

const int &c = 100; 

雖然,

int c = 100 

是合法的代碼。它創建一個名稱爲c的變量int並使用100對其進行初始化。

2
int& i = 100; 

違法。

是合法的說:

int const& i = 100; 
const int& i = 100; // same as above 

在這方面不是特別有用,但它需要爲函數的目的工作電話:

void foo(int const& i) { ... } 
... 
    foo(100);