函数优先级

来源:互联网 发布:电脑管家 激活windows 编辑:程序博客网 时间:2024/06/04 01:00

函数优先级

  1. 函数调用过程

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

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

Actual Argument Formal Argument Type Type & Type & Type Type[]
    Type
Type (argument-list) Type(*) Type const Type Type volatile Type Type * const Type * Type * volatile Type *

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

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