函数重载解析过程

 读过C++ primer后,笔记:

重载函数的解析过程:
        1)创建候选函数列表。其中包含与被调用的名称相同的函数和模板函数。
        2)使用候选函数列表创建可行函数。这些都是参数数目正确的函数,为此有一个隐式转换序列,其中包含实参类型与相应的形参类型完全匹配的情况。
        3)确定是否有最佳的可行函数。如果有,则使用它,否则该函数调用出错。
在确定了所有的候选函数后,如何确定最佳可行函数:
      从最佳到最差的顺序:
        1)完全匹配,但常规函数优先于模板
        2)提升转换(如char和short自动转为int,float自动转为double)
        3)标准转换(如int到char,long到double)
        4)用户定义转换,如类声明中定义的转换。
    完全匹配允许的无关紧要的转换:
              从实参                       到形参
               Type                        Type &
               Type &                        Type
               Type []                        * Type
               Type(argment-list)    Type(*)(argument-list)
               Type                  const Type
               Type                  volatile Type
               Type *                const Type
               Type *                volatile Type *
    非const数据的指针和引用优先于const的指针和引用参数匹配。
       错误:
            void max(int ,int);
            void max(const int,const int); //产生二义性ambiguous
       正确:
            void max(int ,int);
            void max(const int &,const int &);或者void max(const int *,const int *);
      例子:
        int max(int a,int b)
        {
          cout<<"max1..."<<endl;
                return 0;
        }

        int max(const int &a,const int &b)
        {
          cout<<"max2..."<<endl;
                return 0;
        }
       调用:
             int a = 32,b = 5;
          1)max(a,b); //第一个max版本被调用
          2)max(1,2); //产生二义性 const int -> const int & 无关性
             const int a = 1; const int b = 2;
          3)max(a,b); //产生二义性 const int --> const int & 无关性
    两个完全匹配的函数都是模板函数,则较具体的模板函数优先。(最具体指的是编译器推断使用哪种类型时执行的转换最少)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值