"extern const"与"extern"的区别

19

我看到了两种创建全局变量的方法,它们之间有什么区别,何时使用哪种方法?

//.h
extern NSString * const MyConstant;

//.m
NSString * const MyConstant = @"MyConstant";

//.h
extern NSString *MyConstant;

//.m
NSString *MyConstant = @"MyConstant";
1个回答

36

前者适合常量,因为它所指向的字符串是不可更改的:

//.h
extern NSString * const MyConstant;

//.m
NSString * const MyConstant = @"MyConstant";
...
MyConstant = @"Bad Stuff"; // << YAY! compiler error

and

//.h
extern NSString *MyConstant;

//.m
NSString *MyConstant = @"MyConstant";
...
MyConstant = @"Bad Stuff"; // << NO compiler error =\

简而言之,默认情况下使用const(前者)。如果您在日后尝试更改它,编译器会通知您-然后您可以决定是否是您的错误,或者指向的对象可能会发生更改。这是一种很好的保障措施,可以避免许多错误和困惑。

另一种变化是针对一个值:

extern int MyInteger; // << value may be changed anytime
extern const int MyInteger; // << a proper constant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接