混合各种框架和库我经常看到像这样的代码
float floatValue = 0.5f;
float returnValue = 0.0f;
returnValue = (float)[object someMethod:(double)floatValue]; //returns double
在double
和float
之间来回转换是否有任何开销?
我主要对objective-c和llvm编译器感兴趣,但很乐意为其他语言和编译器投票答案。
答案 0 :(得分:4)
float
和double
之间的转换是ARM和x86上任一方向的单个转换指令。在某些情况下,编译器能够消除这些转换(当它可以证明它们不会影响计算结果时),但在您列出的示例中不会出现这种情况。
因此,存在少量开销。在高级接口边界处的一些额外强制转换将不会产生明显的效果。但是,如果可以避免,则不希望在紧密循环中转换每个值。
答案 1 :(得分:3)
是的,存在开销,因为强制转换会导致转换。 cpu中的格式不同。
担心这一点并编写代码以减少它是“预成熟优化”,只是不这样做。如果存在性能问题,请使用仪器,找到并修复。 “最佳实践”是编写最清晰的代码。