我正在学习c ++中的函数重载,我在程序中看到了一个模糊的条件,
long add(long a){
long b = a;
return b;
}
double add(double a){
double b = a;
return b;
}
int main(){
int x;
x = add(10);
printf("x : %d", x);
getch();
return 0;
}
书中给出的含糊不清的原因是,编译器可以在int
或long
中转换double
。因此编译器会生成错误。我运行它,结果相同,错误。
那么long
和double
等效的方式如何?
这里歧义的实际原因是什么?
答案 0 :(得分:3)
long
和double
本身并不相同,而是转换规则 int->long
和int->double
具有相同的优先级,因此编译器在存在两个选项时都会面临歧义。