当编译器从`int`转换时,`long`和`double`是相同的

时间:2016-06-01 09:19:48

标签: c++ type-conversion overloading ambiguous-call

我正在学习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;   
}

书中给出的含糊不清的原因是,编译器可以在intlong中转换double。因此编译器会生成错误。我运行它,结果相同,错误

那么longdouble 等效的方式如何? 这里歧义的实际原因是什么?

1 个答案:

答案 0 :(得分:3)

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