我看到过人们这样初始化浮点变量的代码:
float num = 0.0f;
这样做与仅执行下面的操作之间是否有显着差异?
float num = 0;
谢谢.. :)我看到过人们这样初始化浮点变量的代码:
float num = 0.0f;
这样做与仅执行下面的操作之间是否有显着差异?
float num = 0;
谢谢.. :)float x = 0 中的 int 会被隐式转换为 float 类型。
float x = 0.0f 不需要进行类型转换。
float x = 0.0 中的 double 会被隐式转换为 float 类型。
根据编译器的不同,隐式类型转换可能需要编译器生成额外的代码。
float f = 1 / i; // i an integer
在调试过后,他们发誓要始终充分地装饰字面量以获得正确的类型:
float f = 1.0f / i;
在这种情况下,.0
的作用是确保除法为浮点除法,而不是整数除法。f
的原因是因为没有必要使用 double
进行操作。我认为更有可能的实现情况是,1.0/i
没有任何好处但会显著降低速度(软件浮点模拟、无关紧要的优化),而不是 1.0f
没有任何好处但会显著降低速度(如果 double 比 float 更快,那是因为你有 fp 硬件,所以两者之间的转换将非常快,不会引入显著的减速)。
一旦你养成了给字面量加修饰的习惯,你很可能会写出以下代码:
float f = 0.0f;
即使它与 float f = 0.0;
或 float f = 0;
具有完全相同的效果,但使用它仍然是可行的。
当然,作者可能并没有亲身经历这个领悟,他们可能只是继承了其他人的风格。
我只会写 0
。
R..在评论中指出另一个答案,即写0还具有这样的好处:当你将来更改 f
的类型时,你不必更新字面量以匹配。如果赋值与定义分开,则更改:
float f = something
// some time later
f = 0.1f;
发送给:
double f = something;
// some time later
f = 0.1f;
可能是一个bug。最好使用0.1
并让编译器在必要时截断为float。你可能会认为使用float
本身就是一种优化,无论是时间还是空间方面,处理float和double之间的任何差异的负担应该被视为执行该优化的开发者成本。
在IT技术中,初始化变量时最好使用相同类型的字面常量。在这种情况下,您有一个浮点变量,应该使用浮点字面常量进行初始化,即0.0f
,而不是整数(0
),后者会被隐式转换为浮点型。
严格来说,0是一个整数,因此float num = 0
需要将整数转换为浮点数。但我想编译器会自动为您执行此操作。我猜人们使用0.0f
是为了强调这是一个浮点数,以免被误认为是整数。
'f'表示您想要一个浮点数 :
0是int类型
0f是float类型
0.0是double类型
0.0f是float类型
Paul R已经写了答案。你的第二个例子有一个整数初始化值。
你应该始终使用与正在初始化的变量相同类型的初始化器。这避免了编译时(理想情况下)或运行时(懒惰编译器:有这样的吗?)的任何转换。而且更重要的是,转换在一般情况下可能会导致一些奇怪的事情发生。
在这里,转换应该做到预期的效果,但这仍然是良好的风格并避免了编译器警告。
我不认为在初始化过程中使用这个有任何理由。但是,在涉及浮点字面量的操作中,这将非常有用。例如;
float a=0.43, b;
b = 0.5*a + 2.56*a*a;
float a=0.43, b;
b = 0.5f*a + 2.56f*a*a;