Int或Unsigned Int浮动而不会收到警告

时间:2010-11-23 23:36:35

标签: c++

有时我必须从无符号整数值转换为float。例如,我的图形引擎接收带有浮点数的SetScale(float x, float y, float z),并且我有一个具有一定大小unsigned int的对象。我想将unsigned int转换为float以正确地缩放实体(该示例非常具体,但我希望您明白这一点)。

现在,我通常做的是:

unsigned int size = 5;
float scale = float(size);
My3DObject->SetScale(scale , scale , scale);

在某些假设下(参见注释),这是一种良好的做法吗?有没有比使用float()

丢弃代码更好的方法
  

注意:我无法触摸图形API。我必须使用SetScale()函数,它接受浮点数。而且,我也无法触及大小,它必须是一个无符号的int。我确信还有很多其他例子都有同样的“问题”。以上内容可以应用于任何需要完成的转换,而您作为程序员在这个问题上几乎没有选择。

2 个答案:

答案 0 :(得分:9)

我的偏好是使用static_cast

float scale = static_cast<float>(size);

但你所做的事情在功能上是等同的,也很好。

答案 1 :(得分:9)

存在从unsigned intfloat的隐式转换,因此强制转换是不必要的。

如果您的编译器发出警告,那么使用强制转换来消除警告并没有什么问题。请注意,如果size非常大,则float可能无法完全表示。