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语言不支持。

浙公网安备 33010602011771号