函数重载是一种特殊情况,C++允许在同一作用域中声明几个类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。
为了实现函数重载的功能,函数名就不能再作为一个函数的唯一标识,而是使用了name-mangling方法将函数名转化为了一个独一无二的程序识别代码。
name-mangling方法生成的程序识别码含有以下信息:
1. 字首: Vistual C++中函数名以?开头(为了和C语言中以_或@开头区分),可以使用extern "C"在C++代码中按C语言的方式生成符号。
2. 可选自首:
3. 合格的函数名
4. 类型信息
(摘自wiki)C++编译器可能进行的转化:
int f (void) { return 1; } int f (int) { return 0; } void g (void) { int i = f(), j = f(0); }
转化为:
int __f_v (void) { return 1; } int __f_i (int) { return 0; } void __g_v (void) { int i = __f_v(), j = __f_i(0); }
不同编译器name-mangling实现的方式不同。