2010-07-07 27 views
42

Estoy intentando que una constante NSString en mi archivo .h se defina en mi .m. Entiendo que
extern NSString * const variableName; en .h y
NSString * const variableName = @"variableValue"; es la manera de hacerlo. Al examinar c tutoriales, veo que se supone que const va antes de las definiciones de variables. Mi pregunta es por qué no está declarado como extern const NSString * variableName; en .h y const NSString * variableName = @"variableValue"; en .m. Sé que esto no funciona porque me encuentro con advertencias de compilación que dicen 'Pasar el argumento 1 de methodName: descarta los calificadores del tipo de destino del puntero'. ¿Qué significa esto?Objetivo C const NSString * vs NSString * const

Respuesta

53

No es lo mismo. El modificador const se puede aplicar al valor, o al puntero al valor.

int * const 

Un puntero constante (no modificable) para un número entero (su valor puede ser modificado)

const int * 

Un puntero modificable a un número entero constante (su valor no puede ser modificado)

que usted pueda imaginar:

const int * const; 
+25

Para ampliar eso, si no se trata de un puntero, 'const int' y' int const' son exactamente iguales. 'NSString's ya son inmutables, por lo que la const solo debe aplicarse al puntero (lo que puede ser un poco confuso ya que los objetos Objective-C siempre se acceden a través de punteros). – Wevah

+1

@Macmade ¿por qué no explicaste esto en términos de NSString ya que la sintaxis es diferente de todos modos con el puntero? – jpswain

+1

Para ampliar eso, 'const int *' y 'int const *' son lo mismo, pero 'int * const' es diferente. – user102008

5

puntero constante no es un puntero a constante. Puntero constante significa que el puntero es constante. P.ej. el puntero constante int * const ptr2; indica que ptr2 es un puntero que es constante. Esto significa que ptr2 no se puede hacer que apunte a otro entero. Sin embargo, el entero apuntado por ptr2 se puede cambiar.

Mientras que un puntero a constante const int * ptr1; indica que ptr1 es un puntero que apunta a un número entero constante. El número entero es constante y no se puede cambiar. Sin embargo, el puntero ptr1 se puede hacer que apunte a otro entero.