【问题标题】:Int or Unsigned Int to float without getting a warningInt 或 Unsigned Int 浮动而不收到警告
【发布时间】:2010-11-23 23:36:35
【问题描述】:

有时我必须将无符号整数值转换为浮点数。例如,我的图形引擎接收带有浮点数的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() 函数。此外,我也无法触摸大小,它必须是无符号整数。我相信还有很多其他具有相同“问题”的示例。以上可以应用于任何需要完成的转换,而您作为程序员在这件事上别无选择。

【问题讨论】:

    标签: c++


    【解决方案1】:

    我的偏好是使用static_cast:

    float scale = static_cast<float>(size);
    

    但是您所做的在功能上是等效的并且很好。

    【讨论】:

      【解决方案2】:

      存在从unsigned intfloat 的隐式转换,因此完全不需要强制转换。

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

      【讨论】:

      • 这会像一个 18 岁的孩子在最高设置下对我的编译器进行欺侮一样发出警告。
      • 是的,MS VC++ 10 对此发出警告。删除了我的答案,因为需要演员来摆脱这些。
      • @John:有些编译器在任何事情上都会发出警告。如果存储类说明符不是声明中的第一个关键字(例如,const static int x; 不好但 static const int x; 很好),/W5 的英特尔 C++ 会发出警告。 :-)
      • 这是警告级别 3 的 Visual Studio 2008
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多