下面的const定义有什么区别

通常我使用第一个来定义const,但我不清楚下面的区别。

static NSString* kFetcherCallbackThreadKey = @"_callbackThread";

static NSString* const kFetcherCallbackRunLoopModesKey = @"_runLoopModes";

NSString* const kFetcherRetryInvocationKey = @"_retryInvocation";

static const NSUInteger kMaxNumberOfNextLinksFollowed = 25;

在C中,用于函数外部的static关键字用于声明只能从声明该文件的文件访问的符号。 一种«私人»全局变量。

const关键字表示“常量”。 读取,值不能修改。 请注意这两个陈述是不同的:

const int * x;
int * const x;

第一个定义了一个指向常量整数的指针(它的值不能被修改,但它可以指向其他的东西)。 第二个定义了一个指向整数的常量指针(指针值不能被修改,但是int的值可能是)。 所以你可以完美地拥有:

const int * const x;

所以在你的情况下:

static NSString* kFetcherCallbackThreadKey = @"_callbackThread";

指向NSString实例的指针,只能从声明它的文件访问。

static NSString* const kFetcherCallbackRunLoopModesKey = @"_runLoopModes";

一个指向NSString实例的常量指针,只能从声明它的文件访问。

NSString* const kFetcherRetryInvocationKey = @"_retryInvocation";

指向可从项目的其他文件访问的NSString实例的常量指针。

static const NSUInteger kMaxNumberOfNextLinksFollowed = 25;

一个只能从声明文件中访问的常量整数。


static意味着该变量只能在其声明的编译单元内访问 - 实质上是源文件。 const意味着它的值永远不会改变。 您可以使用一种,也可以不使用,也可以不使用,具体取决于您要找的内容。


这是一个静态字符串,它对于类的所有实例(静态)都是相同的引用。 如果您在一个实例中更改它,它将在所有其他实例中更改。

static NSString* kFetcherCallbackThreadKey = @"_callbackThread";

这是一个指向常量对象的NSString指针,它也在所有实例之间共享(静态)。 const指令使变量不可变。

static NSString* const kFetcherCallbackRunLoopModesKey = @"_runLoopModes";

这是一个指向常量NSString对象的指针。 它可以为每个类有不同的实例(如果NSString不是由编译器实现的,我不确定它们是否是这样),但是不能改变(const)。

NSString* const kFetcherRetryInvocationKey = @"_retryInvocation";

这是一个常量静态整数。 它将在类的所有实例之间共享(静态)并且不能更改(常量)。

static const NSUInteger kMaxNumberOfNextLinksFollowed = 25;
链接地址: http://www.djcxy.com/p/53725.html

上一篇: what is the difference of the following const defintion

下一篇: How to check root access in android?