在 c# 中,您可以将数字文字定义为 int 或 double
Double var1 = 56.1;
int var2 = 51;
这些是分配给文字的默认类型。然而,我正在开发的游戏引擎使用浮点数来表示位置、旋转等。当浮点数被分配一个文字双精度时,即float varFloat = 75.4;
编译器会抛出一个错误,指出双精度文字需要是一个浮点数,这是正确的。因此,需要将双字面值转换为浮点数,即。float varFloat = 75.4f;
. 但是,当给定一个 int 文字时,该 int 会隐式转换为浮点数。IE,
float varFloat = 44; // This is fine.
我的问题是编译器是否足够聪明,可以意识到 44 应该是浮点文字?如果不是,这意味着每次访问文字时,它也在执行转换。在大多数情况下,这真的无关紧要。但是对于高性能代码,如果在所有地方都使用整数而不是浮点数,它可能会成为一个问题(即使它是一个小问题)。据我所知,在不经过源代码行的情况下,无法将这些文字更改为浮点数,这根本不值得花时间。
那么,编译器是否将 int 文字转换为 float 文字?如果不是,除了试图避免这种处理能力的浪费,还能做些什么呢?