2013-05-10 27 views
5

我正在閱讀C++中的引用概念,我在C++ Complete Reference中對此語句有些困惑。引用C++中的引用

不能引用另一個參考

那麼在這種情況下發生:

int var = 10; 
    int& ref = var; 
    int& r_ref = ref; 
    r_ref++; 
    cout << "var:" << var << "ref:" << ref << "r_ref:" << r_ref << endl; 

我得到的輸出是:

var:11 ref:11 r_ref:11 
+3

您編寫的代碼不是引用另一個引用(例如'int &&')。你正在引用一個變量兩次。所以,代碼是確定的。 – deepmax 2013-05-10 11:19:03

回答

10

這是稍微容易混淆的措辭。他們的意思是,你不能有一個int& &類型(請注意,有這樣的東西,如int&&,但這是一個不同類型的參考)。

在您的代碼中,參考ref指的是由var表示的對象。名稱refvar可互換使用以指代相同的對象。所以當你做int& r_ref = ref;時,你並沒有參考引用,而是再次引用同一個對象。

+0

如果對引用的引用被認爲是int&&那麼它就是OK。 – Daemon 2013-05-10 11:32:14

+0

還有一件事**我們無法獲得參考變量**的地址。但是,因爲這裏的ref是指var,所以我可以打印&ref。那麼你能解釋一下嗎? – Daemon 2013-05-10 11:34:53

+1

@Guarav是的,當你執行'&ref'時,你實際上是在引用它所指向的對象的地址。你不能把引用本身的地址。事實上,沒有說明參考本身是否存在於記憶中。 – 2013-05-10 11:35:50

6

所以發生這種情況下:

正在發生的事情是,你正在創造另一個參考r_refref引用的對象,這是var。所以你最後有兩個引用varrefr_ref

記住一提的是隻是一個別名:它綁定到一個對象後(並必須綁定到在初始化時的一些對象,它不能被重新綁定以後),你在參考上做的所有事情都是在參考的對象上完成,就好像 參考只是一個替代名稱一樣。

什麼這個說法的意思是:

不能引用另一個參考

就是你不能把參考自身作爲可以進一步別名實體:引用的對象別名,無論你在引用上做什麼(包括引用邊界!)都是在被引用的對象上完成的。

0

int var = 10;聲明變量var。現在當你寫int& ref = var;定義了對var的引用。您可以將ref視爲var的別名。無論你在哪裏使用ref這就像你會直接使用var

所以這就是爲什麼int& r_ref = ref;只是定義另一個參考var