const关键字在变量声明中定位的意义

时间:2010-01-17 21:45:18

标签: objective-c const constants keyword compiler-warnings

的定位意义何在?
const
在Objective-C中声明变量时使用

关键字,例如:

extern const NSString * MY_CONSTANT;

extern NSString * const MY_CONSTANT;

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

3 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:7)

extern const NSString * MY_CONSTANT; 

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

 extern NSString * const MY_CONSTANT; 

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

答案 2 :(得分:5)

通常,const始终适用于const之前的令牌。在第二种情况下,const表示指针是常量,而不是指向的东西。例外情况是const出现在任何可以有意义的常量之前,如第一个例子中所示。在这种情况下,它适用于第一种类型,在本例中为NSString,因此它等同于extern NSString const * MY_CONSTANT