В чем разница следующего определения const - PullRequest
8 голосов
/ 18 июля 2011

Обычно я использую первый для определения const, но я не знаю разницы в следующем ясно.

static NSString* kFetcherCallbackThreadKey = @"_callbackThread";

static NSString* const kFetcherCallbackRunLoopModesKey = @"_runLoopModes";

NSString* const kFetcherRetryInvocationKey = @"_retryInvocation";

static const NSUInteger kMaxNumberOfNextLinksFollowed = 25;

Ответы [ 3 ]

2 голосов
/ 18 июля 2011

В C ключевое слово static, используемое вне функции, используется для объявления символа, который будет доступен только из файла, в котором он объявлен.Вид «приватных» глобальных переменных.

Ключевое слово const означает «константа».Прочитайте, значение не может быть изменено.Обратите внимание, что два оператора различны:

const int * x;
int * const x;

Первый определяет указатель на постоянное целое число (его значение нельзя изменить, но он может указывать на что-то другое).Второй определяет постоянный указатель на целое число (значение указателя не может быть изменено, но значение int может быть).Таким образом, вы можете иметь:

const int * const x;

В вашем случае:

static NSString* kFetcherCallbackThreadKey = @"_callbackThread";

Указатель на экземпляр NSString, который будет доступен только из файла, в котором он объявлен.

static NSString* const kFetcherCallbackRunLoopModesKey = @"_runLoopModes";

A константа указатель на экземпляр NSString, который будет доступен только из файла, в котором он объявлен.

NSString* const kFetcherRetryInvocationKey = @"_retryInvocation";

A константа указатель на экземпляр NSString, к которому можно получить доступ из других файлов вашего проекта.

static const NSUInteger kMaxNumberOfNextLinksFollowed = 25;

A constant integer, который будет доступен только из файла, в котором он объявлен.

2 голосов
/ 18 июля 2011

static означает, что переменная доступна только в том модуле компиляции, в котором она объявлена ​​- по сути, в этом исходном файле. const означает, что его значение никогда не изменится. Вы можете использовать один, оба или ни одного в зависимости от того, что вы ищете.

0 голосов
/ 18 июля 2011

Это статическая строка, которая будет одинаковой ссылкой для всех экземпляров класса (статические). Если вы измените его в одном случае, он изменится во всех остальных случаях.

static NSString* kFetcherCallbackThreadKey = @"_callbackThread";

Это указатель NSString на постоянный объект, который также используется всеми экземплярами (статический). Директива const делает переменную неизменной.

static NSString* const kFetcherCallbackRunLoopModesKey = @"_runLoopModes";

Это указатель на постоянный объект NSString. Он может иметь разные экземпляры для каждого класса (если NSStrings не интернированы компилятором, я не уверен, что они есть), но его нельзя изменить (const).

NSString* const kFetcherRetryInvocationKey = @"_retryInvocation";

Это постоянное статическое целое число. Он будет общим для всех экземпляров класса (статический) и не может быть изменен (постоянный).

static const NSUInteger kMaxNumberOfNextLinksFollowed = 25;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...