本文给出一个很小的例子,通过反汇编后观察认为,C++的引用本质上等同于C的指针

o foo1.cpp v.s. foo2.cpp

C++的引用本质上等同于C的指针

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++的引用本质上等同于C的指针

由此可见,使用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++的引用即别名,所谓别名,跟真实的变量名共享同一段内存空间,自然得按照指针的方式编译和使用。

相关文章:

  • 2021-10-20
  • 2021-09-03
  • 2022-02-08
  • 2021-11-13
  • 2022-02-15
  • 2021-08-04
猜你喜欢
  • 2021-06-10
  • 2022-12-23
  • 2021-06-27
  • 2021-11-02
  • 2021-10-18
相关资源
相似解决方案