C++ 重载函数匹配

 问题:

在多数情况下,我们容易确定某次调用应该选用哪个重载函数。然而,当几个重载函数的形参数量相等或某些形参的类型可由其他类型转化而来时,这项工作就不那么容易了。

 示例1:

int main()
{
	void f(int);
	void f(double, double b = 1.0);

	f(1);
	f(1.0);
}

void f(int n)
{
	cout << "第一个函数被调用" << endl;
}

void f(double a, double b = 1.0)
{
	cout << "第二个函数被调用" << endl;
}

运行结果1:

这里,每次将其中一个重载函数注释掉。

示例2:

int main()
{
	//void f(int);   // 注释掉第一个函数
	void f(double, double b = 1.0);

	f(1);
	f(1.0);
}

运行结果2:

示例3:

int main()
{
	void f(int);
	//void f(double, double b = 1.0);  // 注释掉第二个函数

	f(1);
	f(1.0);
}

运行结果3:

 

示例4:

int main()
{
	void f(int);
	void f(short);    // 增加一个short类型的参数的函数
	//void f(double, double b = 1.0);

	f(1);
	f(1.0);
}

运行结果4:

结论:

从这三个示例可以看出,C++编译器会优先选择与本次调用最匹配的函数。而当参数数量相同,参数类型不同,但是该参数类型可以由其他类型转换而来时,编译器会对实参进行类型转换,然后进行函数匹配。

但是,当存在多个可以进行类型转换的匹配函数时,则会出现对重载函数调用不明确的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值