将int或unsigned int转换为float时避免警告

3
有时我需要将无符号整数值转换为浮点数。例如,我的图形引擎使用浮点数来表示SetScale(float x, float y, float z),而我的对象的大小是一个unsigned int。我希望将无符号整数转换为浮点数,以便正确缩放实体(这个例子非常具体,但我希望你能理解)。
现在,我通常做的是:
unsigned int size = 5;
float scale = float(size);
My3DObject->SetScale(scale , scale , scale);

在特定的前提下(见注释),这种做法是否可行?有没有比在代码中大量使用float()更好的方法?
注:我不能触及图形API。我必须使用接受浮点数的SetScale()函数。此外,我也不能触及大小,它必须是无符号整数。我相信还有许多其他具有相同“问题”的示例。上述内容适用于任何需要进行转换且作为程序员在此事上几乎没有选择余地的情况。
2个回答

11

我更倾向于使用static_cast

float scale = static_cast<float>(size);

但是你正在做的功能上与这个代码等效而且没问题。


10

可以将unsigned int隐式转换为float,因此强制转换是完全不必要的。

如果您的编译器发出警告,则使用强制转换消除警告并没有什么问题。只需注意,如果size非常大,可能无法准确地表示为float


1
这将会在我的编译器的最高设置下像18岁参加入门仪式一样发出警告。 - John Dibling
是的,MS VC++ 10会对此发出警告。删除了我的答案,因为需要进行强制转换以摆脱这些问题。 - Steve Townsend
@John:有些编译器对所有内容都会发出警告。Intel C++在/W5下,如果存储类别说明符不是声明中的第一个关键字,则会发出警告(例如,const static int x;是错误的,但static const int x;是可以的)。 :-) - James McNellis
这是警告级别为3的Visual Studio 2008。 - Samaursa

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