C++ Primer 学习笔记——函数匹配

C++ Primer 学习笔记——函数匹配

下面以一个例子说明函数匹配的过程:(文章主要内容摘自C++ Primer)

	void fun(int a, int b) {
		cout << "fun" << endl;
	}
	void fun(int a, int b, int c) {
		cout << "fun1" << endl;
	}
	void fun(double a, double b, double c) {
		cout << "fun2" << endl;
	}

	fun(1, 2, 3);			//A
	fun(1, 2, 1.2);			//B

确定候选函数和可行函数

函数匹配的第一步是选定本次调用对应的重载函数集,集合中的函数称为候选函数。候选函数具有两个特征:一是与被调函数同名,二是函数的声明在调用点可见。此处,有三个名为 fun 的候选函数。
第二步考察本次调用提供的实参,然后从候选函数中选出能被这组实参调用的函数,这些函数称为可行函数。可行函数也有两个特征:一是其形参数量与本次调用提供的实参数量相等,二是每个实参的类型与对应的形参类型相同,或者能转换成形参的类型。对于上面代码的 A 调用和 B调用,可以选出两个可行函数,即三参数的 fun 函数。

寻找最佳匹配

在可行函数中,编译器一次检查每个实参以确定那个函数时最佳匹配,如果有且只有一个参数满足下列条件,则匹配成功:

  • 所有实参的匹配都不劣于其他可行函数需要的匹配
  • 至少有一个实参的匹配由于其他可行函数的匹配

若是检查所有函数后,没有一个函数能作为最佳匹配,则调用错误,编译器将报告二义性调用的信息。
在本文开始的码中,A 调用匹配形参为三个 int 的 fun 函数(下文称形参为三 int 参数的fun函数为 fun1,形参为三 double 的 fun 函数为 fun2)时,同时满足上述两个条件,因此 A 调用了 fun1 。而对于 B 调用,虽然匹配 fun1 时前两个参数的匹配优于 fun2 ,但第三个参数的匹配却劣于 fun2。因此,按照上述两个条件,选不出最佳匹配,对于 B 调用编译器将报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值