重载函数的二义性

重载函数的定义
1.函数名称相同
2.参数列表不同
3.与返回值无关

编译器是如何匹配要使用哪个函数的
1.选定候选函数集:被调用函数名相同;声明在调用点可见
2.选定可行函数集:候选函数的参数列表数量相同、各个参数类型相同或可以进行类型转换
3.选出最佳匹配函数:找出最合适的重载函数

函数重载的二义性是指在编译过程中无法找出最匹配的函数,或者说编译器在函数匹配之后还是有很多函数满足要求,无法确定执行哪一个而引发的错误
例一:int get(); 和 int get(int a = 0)    这类函数中,不给参数和有默认参数会造成歧义
例二:int get(int m) 和 float get(float m) 这类函数中,参数隐式转换(double既可以隐式转换为long,也可以是int),无法确定哪一个更加匹配
     int get(int m) 和 int get(int& m)     这类函数中,传值和引用都可以完成调用,只不过传值有拷贝开销,而引用没有拷贝开销
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值