Objective C const NSString*vs NSString*const

dha*_*387 45 constants objective-c

我正在尝试在我的.m文件中定义一个NSString常量.我明白
extern NSString * const variableName;在.h中
NSString * const variableName = @"variableValue";就是这样做的方法.检查c教程我看到const应该在变量定义之前.我的问题是为什么它没有extern const NSString * variableName;在.h和const NSString * variableName = @"variableValue";.m中声明.我知道这不起作用,因为我遇到编译器警告,说"传递methodName的参数1:丢弃指针目标类型的限定符".这是什么意思?

Mac*_*ade 59

这是不一样的.const修饰符可以应用于值或指向值的指针.

int * const
Run Code Online (Sandbox Code Playgroud)

一个常量指针(不可修改)到整数(其值可以修改)

const int *
Run Code Online (Sandbox Code Playgroud)

指向常量整数的可修改指针(其值不能修改)

所以你可以想象:

const int * const;
Run Code Online (Sandbox Code Playgroud)

  • 为了扩展它,如果你不处理指针,`const int`和`int const`是完全相同的.`NSString已经是不可变的,因此const只需要应用于指针(由于总是通过指针访问Objective-C对象,因此可能会有点混乱). (26认同)
  • 我应该说,"`NSString`文字已经是不可变的". (3认同)
  • @Wevah:"NSStrings已经是不可变的",但NSString指针仍然可以指向NSMutableString (2认同)

小智 5

常量指针不是指向常量的指针.常量指针意味着指针是常量.例如,常量指针int * const ptr2;表示这ptr2是一个常量的指针.这意味着ptr2不能指向另一个整数.但是,ptr2可以更改指向的整数.

而指向常量的指针const int * ptr1;表示这ptr1是一个指向常量整数的指针.整数是常量,不能更改.但是,ptr1可以使指针指向某个其他整数.