编译器从 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 转换为 longdouble。所以编译器会产生一个错误。我运行这个和结果是一样的,错误

那么 longdouble 如何 等价 ? 这里歧义的真正原因是什么?

并不是longdouble本身是等价的,而是转换规则 int->longint->double 具有相同的优先级,因此编译器在存在这两个选项时会面临歧义。