Значение позиционирования ключевых слов const в объявлениях переменных - PullRequest
13 голосов
/ 18 января 2010

Каково значение позиционирования

const

ключевое слово при объявлении переменной в Objective-C, например:

extern const NSString * MY_CONSTANT;

против

extern NSString * const MY_CONSTANT;

Использование первой версии в присваиваниях выдает предупреждения о том, что «квалификаторы из целевого типа указателя» отбрасываются, поэтому я предполагаю, что вторая версия гарантирует, что адрес указателя останется прежним. Я был бы очень признателен за более определенный ответ. Большое спасибо заранее!

Ответы [ 3 ]

14 голосов
/ 18 января 2010

В первом случае вы объявляете изменяемый указатель на неизменяемый объект const NSString, тогда как во втором случае вы объявляете неизменный указатель на изменяемый объект NSString.

Простой способ запомнить это - посмотреть, где находится *; все слева от него является типом "pointee", а все справа от него описывают свойства указателя.

7 голосов
/ 22 октября 2010
extern const NSString * MY_CONSTANT; 

- Указатель является переменной, но данные, на которые указывает указатель, являются постоянными.

 extern NSString * const MY_CONSTANT; 

- Константа указателя, но данные, на которые указывает указатель, не постоянны.

5 голосов
/ 18 января 2010

Как правило, const всегда применяется к токену непосредственно перед const. Во втором случае const означает, что указатель является константой, а не той вещью, на которую указывает. Исключением является случай, когда const появляется перед чем-либо, что может быть значимым постоянным, как в вашем первом примере. В этом случае это относится к первому типу, в данном случае NSString, поэтому его эквивалент extern NSString const * MY_CONSTANT

...