6.6 函数匹配

该篇博客探讨了C++中的函数重载和匹配原则。通过实例解析了如何确定调用哪个重载函数,解释了编译器如何在候选函数中选择可行函数,并展示了在不同参数列表下可能产生的二义性问题。此外,还提供了几个函数调用示例,展示了完美匹配的情况。
摘要由CSDN通过智能技术生成

练习6.49
候选函数:调用函数时对应的重载函数集中的函数被称之为候选函数。主要有2个特征:一是与被调用的函数同名,二是其声明在调用点可用。
可行函数:从候选函数中选出来的能被这组实参调用的函数被称之为可行函数。主要有2个特征:一是其形参的数量与本次调用提供的实参数量相等。二是每个实参的类型与对应的形参的类型相同,或者能转换成形参的类型。

练习6.50

void f();
void f(int);
void f(int, int);
void f(double, double = 3.14);

(a)

f(2.56,42);

可行函数包括f(int,int)和f(double,double)。
只考虑第一个实参2.56时,函数f(double,double)能精准匹配,要想匹配第二个函数,int类型的实参就必须转换成double类型。显然需要内置类型转换的匹配劣于精准匹配,因此就第一个实参来说,f(double,double)比f(int,int)更好。
接着考虑第二个实参42,此时f(int,int)是精准匹配,要想调用f(double,double)必须将42从int类型转换成int类型。因此仅就第二个实参来说,f(int,int)更好。
编译器最终因为这个调用具有二义性而拒绝其请求:因为每个可行函数各自在一个实参上实现了更好的匹配,从整体上无法判断孰优孰劣。

(b)

f(42);

完美匹配f(int)函数。

©

f(42,0);

完美匹配f(int,int)函数。

(d)

f(2.56,3.14);

完美匹配f(double,double)函数。

练习6.51

void f() {
	cout << "NO.1" << endl;
}
void f(int) {
	cout << "NO.2" << endl;
}
void f(int, int) {
	cout << "NO.3" << endl;
}
void f(int, int, int) {
	cout << "NO.4" << endl;
}


int main() {
	f();
	f(3);
	f(5, 7);
	f(9, 11, 13);
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值