2017-02-23 58 views
1

據我所知,指針保存一個值的地址,引用可以被認爲是const指針。引用和指針在哪裏執行?

從這個示例代碼:

int main() { 
    int i = 1; 
    int &ri = i; 
    int *pi = &i; 
    return 0; 
} 

拆卸,既指針和參考長得一模一樣:

main: 
    push ebp 
    mov ebp, esp 
    sub esp, 16 
    mov DWORD PTR [ebp-12], 1 
    lea eax, [ebp-12] 
    mov DWORD PTR [ebp-8], eax 
    lea eax, [ebp-12] 
    mov DWORD PTR [ebp-4], eax 
    mov eax, 0 
    leave 
    ret 

是指針和引用只能由編譯器執行呢?

+2

努力理解「強制」的含義。他們是語言功能,他們正在按預期工作 –

+1

順便說一下,檢查未優化的程序集是一種糟糕的學習方式,因爲您只能真正瞭解某個特定實現的實現細節。你可能會忽略這樣一個事實,即int ri = 1; int&i = ri;'會有相同的行爲。 –

回答

4

據我所知,指針保存一個值的地址,引用可以被認爲是const指針。

這是一個簡單的觀點。該標準定義了他們的行爲。這需要一個實現來找出如何支持這種行爲。

鑑於

​​

的標準授權

&ref == &i 

&ptr != &i; 

因此,它可能是有意義的考慮作爲其行爲的某些方面常量指針引用但對於其行爲的所有方面而言,這絕對沒有意義。