2010-01-17 16 views
12

Was ist die Bedeutung der Positionierung desBedeutung des Schlüsselwort const Positionierung in Variablendeklarationen

const 

Schlüsselwort, wenn eine Variable in Objective-C, zum Beispiel erklärt:

extern const NSString * MY_CONSTANT; 

gegen

extern NSString * const MY_CONSTANT; 

Die erste Version in Zuweisungen erzeugt Warnungen über "Qualifier fr om pointer target type "wird verworfen, also nehme ich an, dass die zweite Version sicherstellt, dass die Zeigeradresse gleich bleibt. Ich würde jedoch eine definitive Antwort wirklich schätzen. Vielen Dank im Voraus!

Antwort

13

Im ersten Fall deklarieren Sie einen veränderbaren Zeiger auf ein unveränderliches Objekt const NSString, während Sie im zweiten Fall einen unveränderlichen Zeiger auf ein veränderbares Objekt NSString deklarieren.

Eine einfache Möglichkeit, sich daran zu erinnern, ist zu sehen, wo sich die * befindet; alles links davon ist der "pointee" -Typ und alles rechts davon beschreibt die Eigenschaften des Zeigers.

+2

EZOD ist korrekt - Ich sehe jedoch nicht die Begründung beim Hinzufügen der Konst, wenn ein NSString als String-Konstante deklariert wird. Sie können einen NSString nicht freigeben und Sie können ihn nicht ändern (es ist nicht veränderbar) ... also warum auch nur mit dem Const stören? –

+4

Niemand verwendet 'const NSString * blah', da selbst ein unveränderlicher NSString seine Ivars manipulieren muss (z. B. Zwischenspeichern), und ein NSString kann auch ein NSMutableString sein. Sie verwenden 'NSString * const blah', so dass etwas von Ihrem anderen Code nicht 'if (MY_CONST_STRING = local_string)' tut und ein schädliches Plugin nicht alle Ihre Konstanten wieder in '@" I LIKE MONKEYS "' schreiben kann. –

5

Im Allgemeinen gilt const immer für das Token kurz vor der const. Im zweiten Fall bedeutet const, dass der Zeiger eine Konstante ist, nicht das Ding, auf das gezeigt wird. Die Ausnahme ist, wenn die const vor allem erscheint, was sinnvollerweise konstant sein kann, wie in Ihrem ersten Beispiel. In diesem Fall gilt es für den ersten Typen, in diesem Fall NSString, die so entspricht extern NSString const * MY_CONSTANT

+0

Ich wünschte, ich könnte zwei akzeptierte Antworten geben, beide haben mir geholfen, dies zu verstehen. Vielen Dank Jungs! –

6
extern const NSString * MY_CONSTANT; 

- Zeiger ist variabel, aber die durch den Zeiger hingewiesen Daten konstant ist.

- Zeigerkonstante, aber die vom Zeiger angezeigten Daten sind nicht konstant.

Verwandte Themen