什么是函数倾轧(name mangling)?

什么是函数倾轧(name mangling)?

函数倾轧: 同名不同参函数(重载函数),C++底层如何区分他们,那就是对函数改名,也就是中文翻译的“倾轧”(苦涩难懂的词),改名也是有规律的,不是随便命名,具体参见下面:


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

不能仅仅基于不同的返回类型而实现函数重载。返回值是不影响函数签名的。

C++函数重载底层实现原理是C++利用name mangling(倾轧)技术,来改名函数名,区分参数不同的同名函数。

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

objdump -t查看符号表


 名字改编转化成函数名

 
 
 
 

参考:https://www.jianshu.com/p/f17aa6ecb3a3


原文地址:https://www.cnblogs.com/tsingke/p/12114436.html