本文给出一个很小的例子,通过反汇编后观察认为,C++的引用本质上等同于C的指针。
o foo1.cpp v.s. foo2.cpp
o 对foo1.cpp 和foo2.cpp进行编译
$ g++ -g -Wall -m32 -o foo1 foo1.cpp $ g++ -g -Wall -m32 -o foo2 foo2.cpp
o 对foo1和foo2分别进行反汇编,然后保存到不同的文件,用meld进行diff
由此可见,使用C++的引用(int &p = n;)和C的指针(int *p = &n;)都对应于如下汇编代码:
1 lea -0x8(%ebp), %eax ; Load Effective Address of %ebp - 0x8, save to %eax 2 mov %eax, -0x4(%ebp) ; save %eax to [%ebp - 0x4]
一句话小结,C++的引用即别名,所谓别名,跟真实的变量名共享同一段内存空间,自然得按照指针的方式编译和使用。