Подтвердить что ты не робот

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

Каково значение расположения

const

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

extern const NSString * MY_CONSTANT;

против

extern NSString * const MY_CONSTANT;

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

4b9b3361

Ответ 1

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

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

Ответ 2

extern const NSString * MY_CONSTANT; 

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

 extern NSString * const MY_CONSTANT; 

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

Ответ 3

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