错误83错误C2398:从'double'转换为'float'需要缩小转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误83错误C2398:从'double'转换为'float'需要缩小转换相关的知识,希望对你有一定的参考价值。

我发现了许多关于此错误的帖子,但我可以找到如何克服它。这是触发错误的代码:

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

为什么在initialize-list中没有像任何其他变量那样发生转换?例如,这很顺利:

float f = 1.3;
答案

您已经评论过使用1.3会给编译器带来错误。这意味着你发现了编译器错误。标准很清楚,这不是一个缩小的转换,所以应该允许它。

引用N4140(大致是C ++ 14):

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

缩小转换是隐式转换

[...]

- (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;

以上是关于错误83错误C2398:从'double'转换为'float'需要缩小转换的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI误导性错误:'Int'不能转换为'CGFloat'

BigQuery 加载镶木地板错误 - Parquet 中的字段 INT32 与架构中的 double 类型不兼容

Error: ‘list‘ object cannot be coerced to type ‘double‘

Error: ‘list‘ object cannot be coerced to type ‘double‘

“无效字符'u'寻找值的开头”在golang中开发的服务解析错误

Ubuntu gcc错误:对'log'等函数未定义的引用