写入/传递值与浮点数"f"后缀之间是否存在差异?

Ear*_*rey 1 c objective-c

我相信如果可能,我应该少打字.任何不必要的击键都需要一点时间.在Objective-C的背景下,我的问题是:

我可以输入吗

[UIColor colorWithRed:0 green:0 blue:0 alpha:0.15];
[UIColor colorWithRed:0.45 green:0.45 blue:0.45 alpha:0.15];
Run Code Online (Sandbox Code Playgroud)

或者我必须使用f后缀

[UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.15f];
[UIColor colorWithRed:0.45f green:0.45f blue:0.45f alpha:0.15f];
Run Code Online (Sandbox Code Playgroud)

1)为什么即使没有"f"也能正常工作?

2)如果我需要写f,我是否还有"0"的异常,这意味着如果它为零,没有"f"它仍然可以吗?

Met*_*ght 6

你真正要问的是关于类型文字和隐式转换.

我没有写过多年的C语言,但是这个引用让我相信它与C#没有什么不同(我不能谈论Objective-c)

问题归结为:

  • 0.0是作为一个值的文字符号0double
  • 0.0f是作为一个值的文字符号0float
  • 0是作为一个值的文字符号0int

供给int一个当float预期是好的,因为存在一个隐式转换intfloat编译器可以使用.

但是,如果您指定double一个时float预计,不存在隐式转换.这是因为从而失去了精度double,float并且编译器希望您明确表示您已经意识到这一点.

所以,如果你0.0float期望的时候写,那么期望你的编译器向你抱怨精度的损失:)


PS

我相信如果可能,我应该少打字.任何不必要的击键都需要一点时间.

我不会太担心击键次数.你将浪费更多时间在生活中不清楚的代码上,而不是打字.如果你的时间很有意义,那么最好的办法就是写清楚明确的代码.