C++函数参数匹配规则

博客园 2023-08-17 22:27:04


(相关资料图)

C++ 函数参数匹配1 单个参数匹配
void f(); //f1void f(int); //f2void f(int, int); //f3void f(double, double=3.14);//f4int main() {    f(5.6); //调用f4    return 0;}

candidate functions:函数名称相同(f1, f2, f3, f4 都是)。viable functions:参数个数相同(排除f1, f3),且参数可以转换成相同类型(f2, f4都是viable function)。如果不存在viable functions,则编译器报参数不匹配错误(可以通过linting检查)。 最后决定参数类型是否匹配,如果匹配优先调用,不能则选择可以隐式转换成类型相同的函数。

2 多个参数匹配
void f(); //f1void f(int); //f2void f(int, int); //f3void f(double, double=3.14);//f4int main() {    f(42, 5.6); //报错,参数模糊     return 0;}

condidate functions: f1, f2, f3, f4viable functions: f3, f4优先级: 精确匹配的参数个数越多优先级越高,参数个数相同优先级相同,如果存在多个最高优先级的函数,则报参数模糊错误。

参数类型转换

优先级:

精确匹配:包括类型相同, 数组和参数名转换为指针,忽略顶层constconst 转换 (把非const实参传给const形参)promotion数据提升,如int->long, char->unsigned等算术转换或者指针类型转换类类型(class-type)转换,如string->boolPromotion and Arithmetic Conversion
void ff(int); //f1void ff(short); //f2void manip(long); //f3void manip(float); //f4int main() {    ff("a"); //调用f1,char -> int是promotionO(比int短的数据类型统一promotion为int,              // char->short 是算术转换    manip(3.14); //error: ambiguous call,3.14视为double,double->float和doule->long在优先级上是等价的     return 0;}
const Arguments

忽略顶层const, 原因是传参的时候实际上进行的是copy过程,即copy一份实参给形参,copy会忽略顶层const

void f(int a);void f(const int a);//报错,重复定义,两者只能定义一种void f(int *a);void f(int* const a);//报错,重复定义,两者只能定义一种 
const 转换
void f(int &); //f1void f(const int &);//f2int main() {    const int a{0};    int b{0};     f(a); //调用f2(精确匹配)     f(b); //调用f1(没有定义f1时,调用f2)    return 0;}

另外,

void f(int);void f(int &);int main() {    int i = 0;    f(i); //报错,ambiguous call    return 0;}
x

热门推荐

理文造纸(2314.HK)上半年纯利按年跌57% 每吨净利润达到292港元

2022-08

啤酒行业高端化发展趋势凸显 力推中高端产品

2022-07

疫情后营业额翻四倍 多家小店迎来复苏

2022-05

强化优环境“软实力 赣州经开区助力企业走好绿色发展之路

2022-05

又有一家公司追锂 索通发展进军锂电材料领域胜算几

2022-05

海南推动农贸市场全面落实禁塑 加强违禁塑料制品源头治理

2021-12

柴犬登登拍卖记:动物是如何被司法拍卖的

2021-12

江西:到2025年鄱阳湖区断面水质优良比例达到50%以上

2021-12

西藏森林消防:锻造雪域救援尖兵 打造高海拔山岳救援队伍

2021-12

加强人才融通发展 第10届海峡两岸水利青年工程交流营成功举办

2021-12

推荐阅读

C++函数参数匹配规则

2023-08

赛科希德(688338.SH):拟使用额度不超3.9亿元闲置募集资金进行现金管理

2023-08

湖北省孝感市孝南区十大降成本措施赋能实体经济发展

2023-08

华神科技:目前山东凌凯项目建设团队正根据计划全力推进项目一期建设

2023-08

2023世界机器人博览会购票问题

2023-08

这样疯狂,值得吗?

2023-08

高颜值硬派SUV!约15万元起,奇瑞捷途旅行者或成都车展开启预售

2023-08

兵长一米六还是一米六五(兵长一米六什么意思)

2023-08

音乐剧《天·梦》即将在拉萨首演

2023-08

安徽淮北与广东电池行业协会达成合作 打造先进储能产业集群示范区

2023-08