Answers:
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, 50.0f);
使用浮点常量。(常数0.0通常在Objective-C中声明一个双精度;在末尾加一个f-0.0f-将该常数声明为(32位)浮点数。)
CGRect frame = CGRectMake(0, 0, 320, 50);
使用整数,该整数将自动转换为浮点数。
在这种情况下,两者之间没有(实际的)区别。
如有疑问,请检查汇编器输出。例如,写一个很小的最小片段
#import <Cocoa/Cocoa.h>
void test() {
CGRect r = CGRectMake(0.0f, 0.0f, 320.0f, 50.0f);
NSLog(@"%f", r.size.width);
}
然后使用该-S
选项将其编译为汇编器。
gcc -S test.m
将汇编程序输出保存在test.s
文件中,然后.0f
从常量中删除并重复执行compile命令。然后做一个diff
新的test.s
和上一个。认为这应该表明是否存在任何实际差异。我想太多有一个愿景,他们怎么想的编译器,但在一天结束的时候应该知道如何验证任何理论。
-O
。我使用的是i686-apple-darwin10-gcc-4.2.1(GCC)
有时会有区别。
float f = 0.3; /* OK, throw away bits to convert 0.3 from double to float */
assert ( f == 0.3 ); /* not OK, f is converted from float to double
and the value of 0.3 depends on how many bits you use to represent it. */
assert ( f == 0.3f ); /* OK, comparing two floats, although == is finicky. */
它告诉计算机这是一个浮点数(我假设您在这里谈论的是c / c ++)。如果数字后面没有f,则将其视为双精度或整数(取决于是否存在小数)。
3.0f -> float
3.0 -> double
3 -> integer