整数自动转换为double但不是float

时间:2009-11-22 18:57:36

标签: c++ floating-point double

我有如下功能:

void add(int&,float&,float&);

当我打电话时:

加(1,30,30)

它无法编译。

add(1,30.0,30.0)也无法编译。

似乎在两种情况下,它都被隐式转换为double而不是float。

那么,你是否建议重新定义add as add(int&,double&,double&)?是否有任何其他传递途径使add(1,30,30)工作,而不是使用float转换30或者指定为“float x = 30; add(1,x,x)”?

我曾经认为编译器能够检测到float是一个超整数的整数,因此会成功编译它。显然,事实并非如此。

谢谢!

3 个答案:

答案 0 :(得分:4)

您的函数通过引用而不是值来获取其参数,并且您不能通过非const引用传递常量整数/浮点值。您应该更改函数以按值获取其参数,或者传递实际变量而不是常量,例如:

int x = 1;
float y = 30, z = 30;
add(x, y, z);

您可以隐式地将int投射到floatdouble,但不能隐含地将int&投射到float&

答案 1 :(得分:2)

在你的函数声明中,你要求“pass-by-reference”:

void add(int&,float&,float&);

但您尝试使用常量调用该函数。这就是问题所在。

答案 2 :(得分:0)

intfloatdouble的升迁有效,但问题是你没有将变量传递给add(),所以在add()里面它不能改变它们。

更改add()使其不通过引用传递(删除& s)或传递相应类型的变量。