重载匹配
匹配规则
- 精确匹配
- 常量版本匹配
- 变量提升
- 算数/指针转换
- 类类型转换
当我们为函数重载,并调用重载后的函数时,编译器会自动根据参数类型进行匹配与转换但是此时
容易出现二义性错误,函数参数转换与类型提升容易混淆,例如当我们同时重载了float、double
版本的函数时,传入一个int型实参,就会引起二义性错误
示例理解
常量版本重载与匹配
常量版本不是指const int和int这样的重载,而是指在底层与上层具有不同const含义的变量,
例如指针,const int*,和int不同,前者指向一个无法更改的int常量(底层不变),而有时容易
将const int和int *const搞混,后者是顶层不变,即定义的此变量不能改变,在函数重载时,
int * const和int *具有等价的意义。类似const int和int具有等价意义。
1
int a(const int *){
return 0;
}
2
int a(int *){
return 1;
}
3
int a(int){
return 2;
}
4
int a(const int){
return 3;
}
5
int a(int&){