2011-05-03 61 views
14

它甚至很重要吗? Const before or const after?我猜我是否在CGFloat之前或之后输入const它使CGFloat的值保持不变,但指针呢?这是适合的Objective-C:Const在CGFloat之前还是之后?

// Example.h 

extern CGFloat const kPasscodeInputBoxWidth; 


// Example.m 

CGFloat const kPasscodeInputBoxWidth = 61.0f; 
+1

什么是指针? – pmg 2011-05-03 20:59:34

+0

我的意思是,'CGFloat'的值的内存地址。这是否保持不变? – ma11hew28 2011-05-04 13:20:23

+1

'kPasscodeInputBoxWidth'标识一个对象(非限定类型''CGFloat'')。该对象(与所有其他对象一样)'“...存在,具有一个常量地址,并在其整个生命周期中保留其最后存储的值......”(参见[C99标准](http ://www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf)),所以根据定义,对象的地址是不变的。 – pmg 2011-05-04 13:42:28

回答

19

它可以在之前或之后进行。在指针的情况下,重要的是const是否在星号之前或之后结束:

const int *a; // pointer to const int -- can't change what a points at 
int const *a; // same 

int *const a; // const pointer to int -- can't change the pointer itself. 
       // Note: must be initialized, since it can't be assigned. 
+4

你也可以有'const int * const a;':只读指针指向只读对象:) – pmg 2011-05-03 21:00:39

+2

问题涉及CGFloat而不是整数指针。对于整数,Apple指南指出:“如果常量与其他常量无关,则可以使用const创建整型常量;否则,使用枚举。”他们在使用float时只提倡const。请参阅https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.pdf – 2013-02-21 11:35:17

+0

@MaxMacLeod:确切类型(int,long,float,double,CGFloat等)非常多这里无关紧要。 – 2013-02-21 14:07:27

4

不要紧,(我一直使用前者,但我想这是一个风格问题):

const CGFloat kPasscodeInputBoxWidth = 61.0; 
CGFloat const kPasscodeInputBoxWidth = 61.0; 

至少在当前版本为CGFloat,它只是double的一个typedef,所以请使用常规原始数据类型。对于指针来说,const的位置将决定它是指针还是常量,因此它的确很重要。

+0

'CGFloat'实际上是一个'float',而不是'double'。 – ma11hew28 2011-05-04 13:19:05

+0

我认为它在32位和64位系统之间有所不同。我运行64位,对我来说是双倍的。 – 2011-05-04 13:40:45

+0

有趣。我不知道。我刚刚进入'CGBase.h'的第89行:'typedef CGFLOAT_TYPE CGFloat;',我通过命令单击Xco​​de中的'CGFloat'获得了这些信息。但是,对于你来说,源代码又会如何呢?在所有机器上不应该是一样的吗?嗯......我以为我也是在用64位的。你怎么知道它不是'双'? – ma11hew28 2011-05-07 03:45:44

相关问题