如果我想要一個指向另一個變量的指針,我通過給該變量的地址賦予&來做到這一點。在C++中初始化引用
int foo = 10;
int *bar = &foo;
現在,如果我遵循上述相同的邏輯,而是創建一個引用類型。
int foo = 10;
int &bar = &foo;
我認爲這應該工作,但事實並非如此。爲什麼?
如果我想要一個指向另一個變量的指針,我通過給該變量的地址賦予&來做到這一點。在C++中初始化引用
int foo = 10;
int *bar = &foo;
現在,如果我遵循上述相同的邏輯,而是創建一個引用類型。
int foo = 10;
int &bar = &foo;
我認爲這應該工作,但事實並非如此。爲什麼?
因爲指針和引用不是一回事。 您可以將引用看作是「別名」或「別名」的意思。
換句話說,bar
只是foo
的另一個名字。 當您做int &bar = foo;
時,您希望bar
成爲foo
的另一個名稱,您不希望將foo
的地址分配給bar
。但是,指針會存儲指向它的對象的地址,因此使用指針需要獲得foo
的地址,並將其指定給bar
指針。
編譯器將如何解釋它?這些操作是否真的會在foo上完成,即bar會被foo取代,還是會作爲指向foo的指針? – Carlj901 2012-07-20 23:09:04
@ user1047423:它是實現定義的。 C++標準規定,不指定引用是否具有存儲空間。換句話說,編譯器編寫者可以自由地做他們想做的事情。通常使用指針,但是一個實現可能會刪除所有的條,並且也可以使用foo。 – 2012-07-20 23:15:00
它不起作用,因爲引用需要使用與引用相同的類型進行初始化。在這種情況下:
int foo = 10;
int &bar = foo;
當您嘗試這種方法進行初始化:
int &bar = &foo;
你試圖初始化一個指針到INT一個int參考。類型不匹配。
引用與指針不同,儘管編譯器可能會將其作爲指針下的指針來實現。一個參考基本上說「當我提到酒吧,我真的在談論foo」。
雖然我讚賞你對知識的追求,但我不禁想到以這種方式創建引用完全沒有意義 - 如果有這樣做的一些實用程序,請糾正我。 – 2012-07-20 22:52:43
幾乎與該評論一樣毫無意義。我只是想了解這兩個例子之間的區別。 – Carlj901 2012-07-20 22:57:15
請不要冒犯,因爲沒有人打算。我只是希望對這個我不知道的用例有所啓發。 – 2012-07-20 23:02:44