c++零碎知识整理

1

函数重载的实现机制

函数重载:在相同作用域中的多个函数,具有相同的名字而形参表不同。

不能仅仅基于不同的返回类型而实现函数重载。返回值是不影响函数重名的。
C++函数重载底层实现原理是C++利用name mangling(倾轧)技术,来改名函数名,区分参数不同的同名函数。

编译器通过函数名和其参数类型识别重载函数。为了保证类型安全的连接(type-safe linkage),编译器用参数个数和参数类型对每一个函数标识符进行专门编码,这个过程有时称为“名字改编”(name mangling)或“名字修饰”(name decoration)。类型安全的连接使得程序能够调用合适的重载函数并保证了参数传递的一致性。编译器能够检测到并报告连接错误。

objdump -t查看符号表

gcc编译

test.c
int func(int a){};

编译

gcc -c test.c -o test.o

查看符号

objdump -t test.o

函数名 名字改编

int func(int a);    func

g++编译

test.cpp
int func(int a){};
int func(int a,int b){};

编译

gcc -c test.c -o test.o

查看符号
objdump -t test.o
函数名 名字改编

int func(int a);    _Z4funci
int func(int a,int b);  _Z4funcii

_Z是规定前缀,4是函数名的字符个数,i是参数列表的首字母

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值