2017-02-23 5 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; 

、それはその行動のいくつかの側面のためのconstポインタとしての参照を考えることに意味を行うことができることを、標準的な義務

​​

を考えます間違いなくその行動のあらゆる側面には意味をなさない。

関連する問題