繁体   English   中英

错误83错误C2398:从“双精度”到“浮点型”的转换需要缩小的转换

[英]Error 83 error C2398: conversion from 'double' to 'float' requires a narrowing conversion

我发现了很多有关此错误的信息,但我可以找到解决方法。 这是触发错误的代码:

void main(){
    float f{1.3};
}

为什么在初始化列表中没有像其他任何变量一样进行强制转换? 例如,这可以顺利进行:

float f = 1.3;

您已经评论到1.3的使用会给您的编译器带来错误。 这意味着您已经找到了编译器错误。 该标准很清楚,这不是缩小转换,因此应该允许。

引用N4140(大约C ++ 14):

8.5.4列表初始化[dcl.init.list]

7 缩小转换是隐式转换

[...]

-(7.2)从long doubledoublefloat或从doublefloat除非源是一个常量表达式并且转换后的实际值在可以表示的值的范围内 (即使不能表示)恰好),或

[...]

1.3是一个常量表达式,恰好在float范围内。

我建议将此问题报告给Microsoft,前提是这不是已知问题。 不幸的是,仅升级Visual Studio无法解决此问题。 我可以在VS2015中重现该问题。

使用“ f”后缀将其强制为浮点数可避免缩小转换范围。 下面的作品..

float f{1.3f}

但是我同意编译器应该照顾好它..(按照@hvd引用的标准)

由于它是C ++,所以不要使用c样式的强制类型转换,请尝试:

 static_cast<float>(std::abs(...))

这可能是错误或其他。 使用此代替:

float f;
f=1.3;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM