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)
编译器处理这两种情况的方式没有区别.生成的机器代码将是相同的.但是,第一个是隐式转换,第二个是显式转换.根据编译器标志,在执行失去精度的隐式转换时可能会收到警告.
在旁注中,文字3.14具有类型double,这意味着语句中也可能存在精度损失float f = 3.14.一种干净的方式是写入float f = 3.14f,指定这是类型的值3.14 float.
他们是一样的.
在32位x86系统上使用GCC 4.8.2进行测试.
gcc -Wall -Wextra -Wpedantic在编译这段代码时不会给出任何警告,但随之-Wconversion而来.