C 写入/传递带浮点数的值与不带浮点数的值是否有区别;f";后缀

C 写入/传递带浮点数的值与不带浮点数的值是否有区别;f";后缀,c,objective-c,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]; 还是我必须使用f后缀 [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.15f]; [U

如果可能的话,我想我应该少打字。任何不必要的击键都需要一点时间。 关于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];
还是我必须使用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];
1) 为什么它即使没有“f”也能工作


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

当您键入
0
这是一个整数常量时。如果随后将其分配给float,它会自动升级:这类似于类型转换,但编译器会自动执行

当您键入
0.0f
时,表示直接分配给浮点变量的“零浮点”


在这种情况下,两种方法之间没有明显区别。

当您键入
0
时,这是一个整数常量。如果随后将其分配给float,它会自动升级:这类似于类型转换,但编译器会自动执行

当您键入
0.0f
时,表示直接分配给浮点变量的“零浮点”


在这种情况下,这两种方法之间没有什么有意义的区别。

您真正要问的是类型文本和隐式强制转换

我已经很久没有写过C了,但这让我相信它和C没有什么不同(我不能说objective-C)

问题归结为:

  • 0.0
    是值
    0
    作为
    double
  • 0.0f
    是值
    0
    作为
    float
  • 0
    是值
    0
    作为
    int
当需要
float
时提供
int
是可以的,因为编译器可以使用从
int
float
的隐式转换

但是,如果在预期为
浮点值时指定
double
,则不存在隐式强制转换。这是因为从
double
float
存在精度损失,编译器希望您明确表示您知道这一点

因此,如果您在编写
0.0
时预期会出现
float
,那么您的编译器可能会抱怨精度下降:)


p.S.

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


我不会太担心击键的次数。在你的生活中,你将在不清楚的代码上浪费比打字多得多的时间。如果你的时间意识很强,那么你最好的选择就是编写清晰明确的代码。

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

我已经很久没有写过C了,但这让我相信它和C没有什么不同(我不能说objective-C)

问题归结为:

  • 0.0
    是值
    0
    作为
    double
  • 0.0f
    是值
    0
    作为
    float
  • 0
    是值
    0
    作为
    int
当需要
float
时提供
int
是可以的,因为编译器可以使用从
int
float
的隐式转换

但是,如果在预期为
浮点值时指定
double
,则不存在隐式强制转换。这是因为从
double
float
存在精度损失,编译器希望您明确表示您知道这一点

因此,如果您在编写
0.0
时预期会出现
float
,那么您的编译器可能会抱怨精度下降:)


p.S.

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


我不会太担心击键的次数。在你的生活中,你将在不清楚的代码上浪费比打字多得多的时间。如果你的时间意识很强,那么最好的办法就是编写清晰明确的代码。

你问这个问题的事实表明,尽管有额外的按键,你还是应该明确。任何程序员在开始编写某些代码时最不想做的事情就是说“WTF正在这里发生”。阅读代码的频率比编写代码的频率要高,您刚刚演示过,具有您的经验水平的人可能不知道该代码的功能


是的,它会工作,不,这样做没有编译/运行时的缺点,但是代码应该为其他人而不是编译器编写——编译器不在乎你写的是什么垃圾,不管怎样,它都会做得最好。另一方面,其他程序员可能会举手离开键盘。

你问这个问题的事实表明,尽管有额外的击键,你还是应该明确。任何程序员在开始编写某些代码时最不想做的事情就是说“WTF正在这里发生”。阅读代码的频率比编写代码的频率要高,您刚刚演示过,具有您的经验水平的人可能不知道该代码的功能


是的,它会工作,不,这样做没有编译/运行时的缺点,但是代码应该为其他人而不是编译器编写——编译器不在乎你写的是什么垃圾,不管怎样,它都会做得最好。另一方面,其他程序员可能会举手离开键盘。

在这两种情况下,编译的代码是相同的。(使用LLVM 5.1、Xcode 5.1.1进行测试。)

编译器正在自动转换整数、
float