C++重载的底层原理

1.测试代码

我们知道在C语言中是不支持函数进行重载的,但是在C++中可以进行重载。

#include<stdio.h>
#include"func.h"
int main()
{
  func();
  func(2);
  return 0;
}
#include<stdio.h>
void func();
void func(int a);
#include"func.h"
void func()
{
  printf("func()\n");
}
void func(int a)
{
  printf("func(int)\n");
}

2.使用工具

objdump -S a.out

在这里插入图片描述
可以看到,当调用函数的时候,调用的是<_Z4funcv>和<_Z4funci>两个不同的函数。而在C语言中会统一规划,因此不支持。

3.总结

而在C++的汇编代码中,如果调用函数f(),生成的f()名与其中的参数有关:
如果f()中没有参数,则会生成call fv(?)其中v表示没有参数。
如果f()中的参数为int,则会生成call fi(?)其中i为类型int的首字母。
此时fv(?)与fi(?)对应的符号表中的地址就可以查找了,可以填入,所以C++支持函数重载而C语言不支持。

posted @ 2022-10-18 09:34  卖寂寞的小男孩  阅读(4)  评论(0)    收藏  举报  来源