/* 函数重载
* 定义:同一作用域内函数名相同参数列表不同的函数,称为重载函数
* 注意:
* 1.main()函数不支持重载
* 2.函数重载与返回值无关
* 3.函数重载只关注形参类型、数量,与有无函数名无关
* 4.函数重载与类型别名无关,类型别名并非新类型,因此原类型名和类型别名不构成重载
* 5.顶层const形参与非顶层const形参不构成重载
* 6.基于指针或引用的底层const形参与普通指针或引用形参构成重载
* (常量形参只能匹配常量版,非常量形参优先匹配非常量版)
* 7.局部作用域内声明的函数将导致全局作用域的同名函数被隐藏,无法构成重载
* (原因:c++语言先查找名字后检查类型)
* 8.带默认实参的函数与其同名函数重载时要十分谨慎。
*/
// 1.函数重载与返回值无关
int func1(int a, int b);
double func1(int a, int b); //error:虽然二者返回值不同但构成重载
double func1(double a, double b); //ok:构成重载
// 2.函数重载只关注形参类型、数量,与有无函数名无关
int func2(int a, int b);
double func2(double, double); //ok:构成重载
// 3.函数重载与类型别名无关,类型别名并非新类型,因此原类型名和类型别名不构成重载
using uint = unsigned int; //等同于typedef unsigned int uint;
int func3(unsigned int a, unsigned int b);
int func3(uint a, uint b); //error:不构成重载
// 4.顶层const形参与非顶层const形参不构成重载
int func4(int a, int b);
int func4(const int a, const int b); //error:不构成重载
// 5.基于指针或引用的底层const形参与普通指针或引用形参构成重载
void func5(int *a, int *b); //非常量优先匹配
void func5(const int *a, const int *b); //ok:构成重载,只能匹配常量
// 6.局部作用域内声明的函数将导致全局作用域的同名函数被隐藏,无法构成重载
//全局作用域
int func6(int a, int b);
void func(){
//局部作用域
void func6(double a, double b);
int a = 0, b = 1;
func6(a, b); //只能匹配func6(double a, double b),全局的func6被隐藏
}
//7.带默认实参的函数与其同名函数重载时要十分谨慎
int func7();
int func7(int a = 0, int b = 1);
int func_(){
func7(); //error:虽构成重载但是无法匹配到唯一的函数
}
C++函数重载
最新推荐文章于 2023-10-27 19:02:29 发布