函数重载:
- 在同一作用域下,可以声明几个同名函数,但是参数列表必须不同
- 可以用来处理功能类似,但是传入参数类型不同的问题
#include <iostream>
int Add(int a,int b)
{
return a+b;
}
double Add(double a,double b)
{
return a+b;
}
int main()
{
Add(1,2);
Add(1.0,2.0);
return 0;
}
参数列表不同:
- 参数类型不同
- 参数个数不同
- 参数顺序不同
注意:
- 参数相同但是返回值不同的函数,不算函数重载
名字修饰(name Mangling)(函数重载实现的基础)
- 在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接
- Name Mangling是一种在编译过程中,将函数、变量的名称重新改编的机制,简单来说就是编译器为了区分各个函数,将函数通过某种算法,重新修饰为一个全局唯一的名称。
- C语言中,由于名字修饰只是在函数名前加下划线_,所以C语言不支持函数重载
- C++中,由于要支持函数重载,命名空间等,所以修饰规则复杂。不同的编译器有不同的底层实现规则
在vs中,名字修饰规则:@命名空间,类名@函数名+参数信息@Z
在linux中:Z+函数名字符个数+参数类型简写
extern "C"
在C++项目中需要C风格编译某些函数时,只需要在函数前面加上extern "C"
extern "C" int Add(int a,int b);