1. 认识重载
C++函数重载底层实现原理是C++利用name mangling(倾轧)技术,来改名函数名,区分参数不同的同名函数
C++编译器通过函数名和其参数类型识别重载函数
我们通过 nm ./overload
查看编译情况
int add(int a,int b){
return a+b;
}
float add(float a,float b){
return a+b;
}
int main(){
int n = add(1,2);
}
结果为:
[root@foundation1 C++7.3]# g++ overload.cpp -o overload
[root@foundation1 C++7.3]# nm ./overload
00000000004004a5 t .annobin__dl_relocate_static_pie.end
00000000004004a0 t .annobin__dl_relocate_static_pie.start
00000000004005b0 t .annobin_elf_init.c
0000000000400625 t .annobin_elf_init.c_end
0000000000400470 t .annobin_elf_init.c_end.exit
0000000000400470 t .annobin_elf_init.c_end.hot
0000000000400470 t .annobin_elf_init.c_end.startup
0000000000400470 t .annobin_elf_init.c_end.unlikely
0000000000400470 t .annobin_elf_init.c.exit
0000000000400470 t .annobin_elf_init.c.hot
0000000000400470 t .annobin_elf_init.c.startup
0000000000400470 t .annobin_elf_init.c.unlikely
000000000040049f t .annobin_init.c
000000000040049f t .annobin_init.c_end
0000000000400470 t .annobin_init.c_end.exit
0000000000400470 t .annobin_init.c_end.hot
0000000000400470 t .annobin_init.c_end.startup
0000000000400470 t .annobin_init.c_end.unlikely
0000000000400470 t .annobin_init.c.exit
0000000000400470 t .annobin_init.c.hot
0000000000400470 t .annobin_init.c.startup
0000000000400470 t .annobin_init.c.unlikely
0000000000400625 t .annobin___libc_csu_fini.end
0000000000400615 t