将float转换为int,有和没有强制转换

时间:2014-03-01 08:52:39

标签: c++ c casting floating-point type-conversion

这两个是等价的吗?

float f = 3.14;
int i;
i = f; // 3

float f = 3.14;
int i;
i = (int) f; // 3

5 个答案:

答案 0 :(得分:8)

编译器处理这两种情况的方式没有区别。生成的机器代码将是相同的。但是,第一个是隐式转换,第二个是显式转换。根据编译器标志,在执行失去精度的隐式转换时可能会收到警告。

在旁注中,文字3.14的类型为double,这意味着语句float f = 3.14中也可能存在精度损失。一个干净的方法是写float f = 3.14f,指明这是 类型float的值3.14。

答案 1 :(得分:6)

他们是一样的。

在32位x86系统上使用GCC 4.8.2进行测试。

gcc -Wall -Wextra -Wpedantic在编译此代码时不会发出任何警告,但是-Wconversion会发出警告。

答案 2 :(得分:4)

是的,这些是等价的,没有任何区别。

答案 3 :(得分:0)

编译器足够智能,可以同时处理两种情况。但我更喜欢第二种方法,因为它在大型程序中更容易阅读。此外,建议您在显式转换中指定要投射的类型。最后,您的第一种方法可能无法在C#中使用 参考:http://msdn.microsoft.com/en-us/library/ms173105.aspx

答案 4 :(得分:0)

第二种转换也称为 c-cast ,应避免使用,至少在c ++中,最好使用 static_cast

使用static_cast时,编译器将检查是否可以进行转换(即可以将一种类型转换为另一种类型),而使用旧样式时,即使它们不兼容,它也将始终进行转换