14

定位的意义何在

const

在 Objective-C 中声明变量时的关键字,例如:

extern const NSString * MY_CONSTANT;

相对

extern NSString * const MY_CONSTANT;

在分配中使用第一个版本会产生关于“指针目标类型的限定符”被丢弃的警告,所以我假设第二个版本确保指针地址保持不变。不过,我真的很感激一个更明确的答案。提前谢谢了!

4

3 回答 3

14

在第一种情况下,您声明了一个指向不可变const NSString对象的可变指针,而在第二种情况下,您声明了一个指向可变NSString对象的不可变指针。

记住这一点的一个简单方法是查看它的*位置;它左边的一切都是“pointee”类型,它右边的一切都描述了指针的属性。

于 2010-01-17T21:53:13.283 回答
8
extern const NSString * MY_CONSTANT; 

- 指针是可变的,但指针指向的数据是常数。

 extern NSString * const MY_CONSTANT; 

- 指针常量,但指针指向的数据不是常量。

于 2010-10-22T17:45:15.763 回答
5

通常,const始终适用于 . 之前的标记const。在第二种情况下,这const意味着指针是一个常量,而不是指向的东西。例外情况是const出现在任何有意义的常量之前,如在您的第一个示例中。在这种情况下,它适用于第一种类型,在这种情况下NSString,所以它相当于extern NSString const * MY_CONSTANT

于 2010-01-17T21:59:03.770 回答