`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 имеют эквивалентный приоритет, поэтому компилятор сталкивается с неоднозначностью при наличии обеих опций.

Другие вопросы по тегам