C++ C++;警告:在一个声明中初始化从double到float的截断,但在另一个声明中不初始化
以下是相关代码:C++ C++;警告:在一个声明中初始化从double到float的截断,但在另一个声明中不初始化,c++,C++,以下是相关代码: static const float SMALL_BINDING_TARGET_SIDE = 10; static const float SMALL_BINDING_TARGET_HS = 0.25; static const float SMALL_BINDING_TARGET_HL = 2.6; static const float SMALL_BINDING_TARGET_VS =
static const float SMALL_BINDING_TARGET_SIDE = 10;
static const float SMALL_BINDING_TARGET_HS = 0.25;
static const float SMALL_BINDING_TARGET_HL = 2.6;
static const float SMALL_BINDING_TARGET_VS = 1.33;
static const float SMALL_BINDING_TARGET_VL = 3.54;
问题是我的编译器(使用Qt和MVSC 2017)抛出以下警告:
warning: C4305: 'initializing': truncation from 'double' to 'float'
在下面三行中,但在上面两行中没有。此外,我总共有16个与此完全相同的声明(包括上面代码中的5个),只有这三个声明生成了警告
有谁能告诉我这两者的区别以及我能做些什么来解决它吗?通过添加
f
来指定您的文字是浮动的。因此,一条线将如下所示:
static const float SMALL_BINDING_TARGET_SIDE = 10.f;
如果没有f,则文字将被解释为双精度,并且如果二进制表示比浮点精度长,则可能会被截断
这不会发生,因为上面两个可以用二进制表示,而不使用很多位,因此在不截断的情况下适合于浮点。前两个文本完全可以用浮点表示。实际上,第一个是整数,第二个是2的幂。当您指定的值导致二进制表示,若不截断某些位,则该值将不适用于浮点。从double到float的转换非常昂贵,在任何其他情况下,您都希望避免这种情况
您可以通过传递浮点文字来抑制警告,例如,
1.33f
将生成最接近您指定值的浮点表示。前两个是完全可表示的,没有数据loss@Swift-星期五派我试着这么说。不清楚吗?谢谢!这解决了我的问题