Overloaded function call matches

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))。

你可能感兴趣的:(function)