函数重载中的整型和浮点型参数

3

我有两个重载函数,如下所示:

void print(int i) { ... }
void print(float f) { ... }

我对 print(1.2); 显示以下错误:

error: call of overloaded 'print(double)' is ambiguous 

有人能解释一下为什么吗?


1
你想进行哪种转换?double -> int 还是 double -> float? - Jarod42
1
恰好C++规定double->intdouble->float 是同样有效的。其中一个可能比另一个更好,但这不是作出的决定。 - chris
1
尝试一下:print(1.2f); - zdf
3个回答

5

1.2是双精度值而不是单精度值。

因此,编译器需要明确的区分。

使用1.2f可以解决问题,因为它是一个单精度值。


1

它将1.2解释为double类型。将其转换为float类型即可解决问题。

print( float(1.2) );


1
加一,但严格来说,在f后缀不是一个转换。 - Bathsheba

1

1.2 是一个 double 字面量,使得你试图调用的函数具有歧义性 - 一个 double 可以被截断成 float 或者 int。使用 float 字面量 (1.2f) 或者显式转换可以解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接