2011-10-12 80 views
0

我抓到,我使用的引用不明白他們到底是如何工作的任何較大的差異(這就是爲什麼我這樣經常使用他們不要)。C++:在_implementation_參考和指針

指針似乎被簡單地實現莫名其妙地想:一個簡單的WORD變量與其他變量的地址。當我們將其作爲參數傳遞給函數時,我們將其複製。

而當我們通過引用作爲參數,會發生什麼?舊的方式?

+0

你的問題似乎混淆* language *和* implementation *。該語言沒有指定如何實施參考。 –

+0

你是對的。只有「這種代碼應該做什麼」的標準,對嗎?那麼,你的意思是每個編譯器都以不同的方式實現它? –

+1

沒錯。如果某些引用可以直接解析,那麼它們可能根本不會表現出來,其他(如通過腳趾外部函數的引用)可能會被大多數編譯器實現爲指針,但是語言中沒有任何要求。 –

回答

2

兩個沒有共同點,就像你會覺得,真的。

參考存在於抽象的編譯器中的一個較高的水平。它根本不需要生成任何代碼。它本質上是一個對象的別名,所以無論何時使用它,編譯器都會將其視爲對被引用對象的使用。當然,有時編譯器會選擇通過生成一個可以根據需要傳遞的指針值來表示使用引用的代碼,但引用實際上並不與特定表示形式綁定。

指針更接近金屬。它是一個存儲地址的變量。

+0

+1不同層次的抽象是什麼使整體差異 –

2

關於它們是如何實現的細節,這取決於它們所使用的上下文。如果引用僅在範圍內有效,編譯器可以刪除引用(別名)並在需要時使用引用的對象。

如果引用不能被證明不能逃脫當前作用域(就像在一個可以動態分配的類的成員中那樣),大多數編譯器都會使用一個指針自動解除引用來實現它(並提供剩餘的保證可用於引用而不是純指針)。