函数重载基本概念
1. 同一作用域下,函数名相同,返回值类型相同,参数列表不同
2. 参数列表不同:参数的类型、个数、顺序不同。
void show(int a, long b)
{
cout << "1" << endl;
}
void show(long a,int b)
{
cout << "2" << endl;
}
void test()
{
long x = 1;
int a = 2;
show(a, x);
show(x, a);
}
- 本质上是2个独立的函数,主要靠函数名和形参列表区分开来
-
1. 用vcifld分别实现:void,char,int,float,long,double形参类型
2. void xxx(int a, char b, double d);
3. 查看Linux中函数重载时发生的函数名字改编:
1. g++ test.cpp
2. nm test.o
- void(*FP)(int,int);
- FP=fun(10,20);
- FP=fun(10,20,1);
- 若重载时加了默认参数,调用函数时可能导致二义性
- 函数名相同,返回值类型不同,不构成重载,编译错误
- C语言不支持函数重载
- 将所有同名函数作为候选者
- 尝试寻找可靠的候选函数(3个条件同时进行)
- 精确匹配实参
- 通过默认参数匹配
- 通过默认参数类型转换匹配实参
- 匹配失败时
- 最终寻找到可行的候选函数不唯一,则出现二义性,编译失败
- 无法匹配所有的候选者,即函数未定义,编译失败
- 当使用重载函数名给函数指针赋值时
- 根据重载规则,挑选与函数名指针参数一致的候选者
- 严格匹配候选者形参类型与函数指针的函数形参类型
`
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理