objective-c - 在 iOS 上,当您将 double 传递给需要 [single] float 作为参数的方法时,实际发生了什么?

标签 objective-c ios llvm

假设我有一个函数:

- (void) doSomethingWithFloat:(float)aFloat;

我用 double 浮点值调用该函数,如下所示:

[self doSomethingWithFloat:12.0];

从 12.0( double )到 12.0f(单精度)的转换是在编译时或运行时完成还是两者都不完成?

只是为了清楚起见:我不是在问单精度和 double 之间的区别 精度 float 。

最佳答案

ObjectiveC 实际上遵循大多数 C 约定 - 因此当传递给函数时,根据 C 规范, float 会提升为 double 。 ObjectiveC 编译器最终将所有方法转换为函数,因此您的 double 可以工作。

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

关于objective-c - 在 iOS 上,当您将 double 传递给需要 [single] float 作为参数的方法时,实际发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11514087/

相关文章:

swift - 将 Swift 编译为 WebAssembly

ios - 移动 imageView 时旋转它

javascript - HTML 页面加载时发布 NSNotification

iphone - 取消操作时 ASIHTTPRequest 和 NSOperationQueue 崩溃

ios - 在 iTunes 连接上上传应用程序后在电子邮件中出现问题,意外的 CFBundleExecutable key

ios - UITextView 保存属性文本

ios - 从 zeplin 导出到草图

c++ - 通过LLVM/Clang与MyLanguage Converter进行C++往返

objective-c - 在 Core Foundation 中保留和 "autoreleasing"

data-structures - 将非类型化 Lisp 数据映射为类型化二进制格式以用于编译函数