函数重载的实现机制

   函数重载是一种特殊情况,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实现的方式不同。

原文地址:https://www.cnblogs.com/HadesBlog/p/12833257.html