您的位置:首页 > 编程语言 > C语言/C++

c++零碎知识整理

2018-03-05 16:20 281 查看

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是参数列表的首字母
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: