根据我的理解,指针包含值的地址,引用可以被认为是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
指针和引用是否仅由编译器强制执行?
答案 0 :(得分:4)
根据我的理解,指针包含值的地址,引用可以被认为是const指针。
这是一个简单的观点。该标准定义了他们的行为。由实现来决定如何支持这种行为。
鉴于
int i = 0;
int& ref = i;
int* ptr = &i;
标准要求
&ref == &i
和
&ptr != &i;
因此,将引用视为其行为的某些方面的const指针可能是有意义的,但它对于其行为的所有方面肯定没有意义。