Цель C const NSString * против NSString * const - PullRequest
45 голосов
/ 07 июля 2010

Я пытаюсь определить константу NSString в моем файле .h в моем .m. Я понимаю, что
extern NSString * const variableName; в .ч и
NSString * const variableName = @"variableValue"; это способ сделать это. Изучая c уроки, я вижу, что const должен идти перед определениями переменных. У меня вопрос, почему он не объявлен как extern const NSString * variableName; в .h и const NSString * variableName = @"variableValue"; в .m. Я знаю, что это не работает, потому что я сталкиваюсь с предупреждениями компилятора, которые говорят: «Передача аргумента 1 метода methodName: отбрасывает квалификаторы из целевого типа указателя». Что это значит?

Ответы [ 2 ]

59 голосов
/ 07 июля 2010

Это не то же самое.Модификатор const может быть применен к значению или указателю на значение.


int * const

Постоянный указатель (не изменяемый) на целое число (его значение может быть изменено)


const int *

Модифицируемый указатель на постоянное целое число (его значение нельзя изменить)


Итак, вы можете себе представить:

const int * const;
5 голосов
/ 05 апреля 2013

Указатель константы НЕ является указателем на константу.Постоянный указатель означает, что указатель является постоянным.Например, постоянный указатель int * const ptr2; указывает, что ptr2 является указателем, который является постоянным.Это означает, что ptr2 нельзя указывать на другое целое число.Однако целое число, обозначенное ptr2, может быть изменено.

В то время как указатель на константу const int * ptr1; указывает, что ptr1 является указателем, который указывает на постоянное целое число.Целое число является постоянным и не может быть изменено.Тем не менее, указатель ptr1 можно сделать так, чтобы он указывал на другое целое число.

...