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是参数列表的首字母
相关文章推荐
- (C++)零碎知识整理
- C/C++零碎知识整理(二)
- C/C++零碎知识整理
- C/C++零碎知识整理(二)
- C++零碎知识整理
- java知识零碎整理
- 再探java基础——零碎基础知识整理
- C/C++语法知识精华整理(1)-左值与右值、变量与常量、 define与const、Printf特点、补码与阶码、位运算等
- C++知识碎片整理(2)——字符串大小写转换
- C/C++一些零碎的知识
- C++知识要点整理05:常对象 常引用
- 再探java基础——零碎基础知识整理
- c++初级知识简单整理(二)
- c++基础知识整理
- c++ 基础知识整理(四)
- Android系统零碎知识整理
- Android应用开发零碎知识整理
- C++知识整理(在此感谢大牛的整理)
- C++基础知识整理(一)
- C++零碎基础知识点(一)