调用重载函数时将int转换为double

时间:2015-10-12 14:37:56

标签: c++

void essai (int, double); // essai I
void essai (double, int); // essai II

int n, p; double z; char c;

essai(n,z); // calling essai I
essai(c,z); // calling essai I, after the conversion of c in int
essai(n,p); // compilation error

为什么essai(n,p)会在此处产生编译错误?是因为无法从int转换为double?

3 个答案:

答案 0 :(得分:3)

编译器会针对您的三种情况中的每一种情况查看essai的两个重载,并确定要执行的重载以及执行调用所执行的转换:

  1. 如果essai(n,z)重载#1获胜,因为它可以在没有转换的情况下调用,而不是2次转换用于重载#2
  2. 如果是essai(c,z),则重载#1会获胜,因为可以通过charint的单次转换来调用,而不是#2}的两次转换
  3. 如果是essai(n,p),两个重载都需要相同数量的转换(两个)。由于没有明确的赢家,编译器认为调用不明确,并发出错误。

答案 1 :(得分:1)

两个

void essai (int, double);
void essai (double, int);
当您调用essai(n,p);时,

是有效的重载,因为int之一需要转换,因此它可以转换任何一个。由于您有两个相等的重载,编译器会放弃并且应该发出模糊编译器错误。

答案 2 :(得分:0)

编译器不知道要转换为int的{​​{1}}哪些数据。

你应该明确地将它转换为调用essai I:
double

或致电essai II:
essai(n,(double)p);