如何部分禁用C4244

Phi*_*lip 6 c++ visual-c++ visual-studio-2012

在Visual C++ 2012中的代码

double d = 0.5;
float f = d;
int i = f;
Run Code Online (Sandbox Code Playgroud)

向我发出2个警告:

test.cpp(26): warning C4244: 'initializing' : conversion from 'double' to 'float', possible loss of data
test.cpp(27): warning C4244: 'initializing' : conversion from 'float' to 'int', possible loss of data
Run Code Online (Sandbox Code Playgroud)

我想压制我认为垃圾邮件的第一个警告,但保留第二个警告我认为非常有帮助.有可能压制一个并保持另一个吗?人们通常只是压制他们吗?我们有一个错误的错误,我们错误地将双重传递给浮动.但是我们的数学代码会触发double-> float警告.

Cas*_*sey 4

请勿禁止旨在防止潜在错误的警告.通过强制转换告诉编译器您知道自己在做什么:

double d = 0.5;
float f = static_cast<float>(d);
int i = static_cast<int>(f);
Run Code Online (Sandbox Code Playgroud)

  • 同意将float转换为整数.但是我们不能在每个double上进行转换浮动,使用图形编程和众多API我们抛出大量的浮点/双数据,我们不关心它是否会在99%的时间内被截断.我们可以打开完整的警告,并尝试全部根除,但我的感觉是它是难以处理的,因此问题. (8认同)