Значение позиционирования ключевого слова const в объявлениях переменных
Каково значение расположения
const
при объявлении переменной в Objective-C, например:
extern const NSString * MY_CONSTANT;
против
extern NSString * const MY_CONSTANT;
Использование первой версии в назначениях приводит к отбрасыванию предупреждений о том, что "отборочные от целевого типа указателя" отбрасываются, поэтому я предполагаю, что вторая версия гарантирует, что адрес указателя останется прежним. Однако я бы очень признателен за более окончательный ответ. Большое спасибо заранее!
Ответы
Ответ 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