`long` и`double` одинаковы при преобразовании из `int ` компилятором
Я изучал перегрузку функций в 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
эквивалентны? в чем здесь причина неясности?
1 ответ
Решение
Это не то long
а также double
эквивалентны сами по себе, а скорее правила преобразования int->long
а также int->double
имеют эквивалентный приоритет, поэтому компилятор сталкивается с неоднозначностью при наличии обеих опций.