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