函数优先级

函数优先级

  1. 函数调用过程

    • 列出所有名字与要调用的函数相同的函数。
    • 汇总出有正确数目与类型的参数的函数(允许隐式转换)
    • 决定最优函数,调用它,如果没有,即没有匹配的函数或匹配的函数分不出优劣,报错
  2. 如何决定最佳可行函数(从上到下优先级递减)

    • 准确匹配
    • 整型提升转换,e.g. char to int, float to double
    • 标准(算术)转换,e.g. int to char,long to double
    • 用户定义的转换(在类体系内的转换)
  3. 准确匹配
    准确匹配允许一些转换,经过这些转换的参数与准确匹配的参数具有相同优先级。

Actual ArgumentFormal Argument
TypeType &
Type &Type
Type[]
  • Type
Type (argument-list)Type(*)
Typeconst Type
Typevolatile Type
Type *const Type *
Type *volatile Type *

e.g.
如果我定义了int func(Type para) 和 int func(Type &para),两者都是准确匹配,此时没有最佳匹配。

  1. 最佳匹配
    准确匹配的前提下,以下情况下存在最佳匹配:
    • 指向const实参的指针引用对于const的指针引用更加匹配,对于non-const亦然。
    • 对于模板函数,模板具体化,非模板函数,越具体化的优先级越高,其中:
      • 函数 < 模板具体化 < 非模板函数
      • 对于同样是模板具体化或同样是模板函数,在模板参数推断时所需步骤少的具体化程度高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值