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

Sam*_*rsa 2 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);
Run Code Online (Sandbox Code Playgroud)

在某些假设下,这是一种良好的做法吗(见注释)?有没有比丢弃代码更好的方法float()

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

Joh*_*ing 9

我的偏好是使用static_cast:

float scale = static_cast<float>(size);
Run Code Online (Sandbox Code Playgroud)

但你正在做的是功能相同和罚款.


Jam*_*lis 9

有从隐式转换unsigned intfloat,所以剧组严格不必要的.

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