2

假设我有一个函数:

- (void) doSomethingWithFloat:(float)aFloat;

我用双精度浮点值调用该函数,如下所示:

[self doSomethingWithFloat:12.0];

是在编译时或运行时完成从 12.0(双)到 12.0f(单)的转换,还是两者都没有?

只是为了清楚起见:我不是在问单精度和双精度浮点数之间的区别。

4

1 回答 1

5

ObjectiveC 实际上遵循大多数 C 约定 - 因此在传递给函数时,根据 C 规范将浮点数提升为双倍。ObjectiveC 编译器最终将所有方法转换为函数,所以你的双重工作。

这就是说最好打开编译器警告并传递 CGFloats 或 floats - 它只是让您知道何时失去精度。

于 2012-07-16T23:45:50.037 回答