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