c++引用和指针,不为人知的秘密。

来源:互联网 发布:unity3d 离散事件仿真 编辑:程序博客网 时间:2024/06/01 08:15

读大学的时候老师总是说,引用和指针有个显然的区别,就是引用是不会分配内存的空间的,而指针是有自己的内存地址的。

例如:int a = 1; int &b = a; int *c = &a; print("%X, %X, %X", &a, &b, &c); 可以通过输出的结果知道:a和b打印的地址相同。


但是:

int main()
{
int a = 1; 
int &b = a; 
int *c = &a;
int *d = &b;
return 0;
}

如果通过反汇编却发现:

.file"hellWord.cpp"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
.cfi_personality 0x3,__gxx_personality_v0
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $1, -28(%rbp)
leaq -28(%rbp), %rax
movq %rax, -24(%rbp)
leaq -28(%rbp), %rax
movq %rax, -16(%rbp)
movq -24(%rbp), %rax
movq %rax, -8(%rbp)
movl $0, %eax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-3)"
.section .note.GNU-stack,"",@progbits


通过汇编代码可以知道:其实引用是分配了地址的,只是编译器给过滤处理了。



0 0
原创粉丝点击