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

Geo*_*ton 5 c c++ floating-point casting type-conversion

这两个是等价的吗?

float f = 3.14;
int i;
i = f; // 3
Run Code Online (Sandbox Code Playgroud)

float f = 3.14;
int i;
i = (int) f; // 3
Run Code Online (Sandbox Code Playgroud)

Vio*_*ffe 8

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

在旁注中,文字3.14具有类型double,这意味着语句中也可能存在精度损失float f = 3.14.一种干净的方式是写入float f = 3.14f,指定这是类型的值3.14 float.


Lee*_*hem 6

他们是一样的.

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

gcc -Wall -Wextra -Wpedantic在编译这段代码时不会给出任何警告,但随之-Wconversion而来.