引用和指针在哪里强制执行?

时间:2017-02-23 04:55:24

标签: c++ pointers reference

根据我的理解,指针包含值的地址,引用可以被认为是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

指针和引用是否仅由编译器强制执行?

1 个答案:

答案 0 :(得分:4)

  

根据我的理解,指针包含值的地址,引用可以被认为是const指针。

这是一个简单的观点。该标准定义了他们的行为。由实现来决定如何支持这种行为。

鉴于

int i = 0;
int& ref = i;
int* ptr = &i;

标准要求

&ref == &i

&ptr != &i;

因此,将引用视为其行为的某些方面的const指针可能是有意义的,但它对于其行为的所有方面肯定没有意义。