C++重载解析

本文详细阐述了C++中的重载解析原理,包括何时应用重载解析、简化过的重载解析规则,如完美匹配、成员函数的隐含实参、非模板优先原则等,并探讨了转型序列、指针转型和仿函数代理函数在重载解析中的作用。
摘要由CSDN通过智能技术生成

B.1何时应用重载解析

重载解析可以看作是函数调用整个完整处理过程的一部分。首先,如果是通过指针或者成员函数指针来进行调用,就不会进行重载解析:因为究竟调用哪一个是在运行期由指针(实际所指的对象)来决定的。另外,类似函数的宏不能被重载,因此就不会进行重载解析。

B.2简化过的重载解析

重载解析通过比较调用实参和候选参数的匹配程度,来对所有的可行候选函数进行分级,对于匹配级别高的候选函数,它每个参数的匹配程度都不能低于匹配级别低的候选函数的相应参数的匹配程度。下面的例子说明了这一点:

void combine(int,double);
void combine(long,int);

int main()
{
combine(1,2);//二义性
}

这个例子中,因为一个候选函数可以最佳匹配第一个参数,而第二个候选函数可以最佳匹配第二个参数,。我们可能觉得:从某种意义上而言,int与long的相似度要比int与double相似度高(因此选择第二个),但是C++并不会试图度量这种涉及到多个调用实参的相似度,从而引发二义性。

根据分级原则,我们可以对下面的匹配精心分级(从最佳到最差):

1) 完美匹配。(参数的类型和实参(表达式)的类型相同,或者参数的类型是指向实参类型的引用(也可以增加const或者volatile限定符))

2) 有细微调整的匹配。

3) 发生提升的匹配。(提升是一种隐式类型转换,它包含包占位少的整数类型(bool,char,short或者枚举)转换为占位多的类型(int,unsigned int,long或者unsigned long),还包括从float到double的转换。

4) 发生标准转换的匹配。(这包含任何种类的标准转换,但并不包含隐式调用的类型转换运算符和单参数构造函数)

5) 发生用户自定义转型的匹配。(允许任何种类的隐式转换)

6) 和省略号的匹配。(省略号可以匹配任何类型(但匹配非POD(plain old data&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值