如何部分禁用C4244 Visual C++ 2012中的代码< < /P> double d = 0.5; float f = d; int i = f;

如何部分禁用C4244 Visual C++ 2012中的代码< < /P> double d = 0.5; float f = d; int i = f;,c++,visual-c++,visual-studio-2012,C++,Visual C++,Visual Studio 2012,为我发布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 我想抑制我认为垃圾邮件的第一个警告,但是保持第二个警告,我认为这

为我发布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

我想抑制我认为垃圾邮件的第一个警告,但是保持第二个警告,我认为这很有帮助。有可能抑制一个而保留另一个吗?人们通常只是压制他们吗?我们遇到了一个严重的错误,我们错误地将一个双人球传给了一个浮球。但是我们发现,大量的数学代码会触发双->浮点警告。

不要抑制旨在防止潜在错误的警告。通过强制转换告诉编译器您知道自己在做什么:

double d = 0.5;
float f = static_cast<float>(d);
int i = static_cast<int>(f);
double d=0.5;
浮子f=静态铸件(d);
int i=静态(f);

如果不在全局范围内设置警告级别2,则会错过太多有用的警告。静态强制转换(var)有效吗?基本上希望保留级别2的C4244警告,但仅抑制C4244的级别3和4,但通常保持在级别4。也许不可能,但这就是为什么我问的原因,看看有什么诀窍可以做到。这是一个很好的问题。已经四年了,你找到解决办法了吗?我没找到办法。我接受了下面的答案“不要禁用警告”。同意浮点到整数的转换。但是我们不能对每一个double-to-float进行强制转换,因为图形编程和大量的API,我们抛出了大量的float/double数据,我们不在乎它是否在99%的时间内被截断。我们可以打开完整的警告,并试图彻底根除它,但我的感觉是,它是难以解决的,因此问题就来了。@Philip你可以通过使其隐式化来隐藏转换。将其作为
double
s传递给参数,该参数期望
int
s,并且不会抛出警告。不过,它可能需要为图形库编写一个外观。