编译器警告(等级 3)C4738
将 32 位浮点型结果存储在内存中,可能会降低性能
C4738 警告赋值、强制转换、传递参数或其他操作的结果可能需要舍入,或者操作耗尽寄存器,需使用内存(溢出)。 这可能会导致性能下降。
要解决此警告并避免舍入,请使用 /fp:fast 编译或使用 double
而不是 float
。
要解决此警告并避免耗尽寄存器,请更改计算顺序并修改对内联的使用
默认情况下,此警告处于关闭状态。 有关详细信息,请参阅 Compiler Warnings That Are Off by Default。
示例
下面的示例生成 C4738:
// C4738.cpp
// compile with: /c /fp:precise /O2 /W3
// processor: x86
#include <stdio.h>
#pragma warning(default : 4738)
float func(float f)
{
return f;
}
int main()
{
extern float f, f1, f2;
double d = 0.0;
f1 = func(d);
f2 = (float) d;
f = f1 + f2; // C4738
printf_s("%f\n", f);
}