`
swincle
  • 浏览: 76864 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Overloaded function call matches

    博客分类:
  • C++
 
阅读更多

C++按下列三个步骤的先后顺序找到匹配并调用函数:

(1)寻找一个严格匹配,如果找到了,就用那个函数;

(2)通过相容类型的隐式转换寻求一个匹配,如果找到了,就用那个函数;

(3)通过用户定义的转换寻求一个匹配,若能查出有唯一的一组转换,就用那个函数。

例如,重载函数print的匹配:

void print(double);
void print(int);

void func() {
    print(1);             //匹配int;-----顺序1
    print(1.0);          //匹配double;-----顺序1
    print('a');           //匹配int;-----顺序2
    print(3.1415f);  //匹配double;-----顺序2
}

 C++允许int型容到long型,int型容到double型的隐式转换。但若必须在两者之间抉择时,则会引起错误。

例如

void print(long a);
void print(double a);

void func(int a) {
    print(a);             //这里的print要匹配哪一个呢?
}
 为避免匹配冲突,在调用时,应显示表明是print(long(a))还是print(double(a))。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics