编译器从 int 转换时,long 和 double 相同
`long` and `double` are same when converting from `int ` by compiler
我在研究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
如何 等价 ?
这里歧义的真正原因是什么?
并不是long
和double
本身是等价的,而是转换规则 int->long
和int->double
具有相同的优先级,因此编译器在存在这两个选项时会面临歧义。
我在研究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
如何 等价 ?
这里歧义的真正原因是什么?
并不是long
和double
本身是等价的,而是转换规则 int->long
和int->double
具有相同的优先级,因此编译器在存在这两个选项时会面临歧义。