Const-Daten: Zwei deklarierte Pfade
In C können Sie die Daten oder den Zeiger eines Objekts mithilfe von const unveränderlich machen. Die traditionelle Syntax hierfür lautet:
const T *obj; // Pointer to const data T const *obj; // Equivalent to const T*
Möglicherweise ist Ihnen jedoch eine alternative Syntax aufgefallen:
Object const *obj;
Da stellt sich die Frage: Warum sind beide Syntaxen gültig und wann sollten Sie dies tun? übereinander verwenden?
Die Geburt von Const Data
Die Positionierung von const innerhalb von Typdeklarationen stammt aus den Anfängen von C. Die von Kernighan und Ritchie definierte Sprachgrammatik ermöglichte die Deklaration von const-Daten wie folgt:
const T *obj;
Im Wesentlichen analysierte der C-Compiler Token von links nach Rechts, Anwenden von const auf die entsprechende Typspezifikation basierend auf der Position des Tokens.
Die Const-Qualifizierer Anwendung
Die Position von const innerhalb von Typdeklarationen hat keinen Einfluss auf das Ergebnis, da const immer für die Deklaration links davon gilt. Im Fall von Zeigern:
Semantische Äquivalenz
Der Grund für diese Äquivalenz ist, dass die semantische Bedeutung der Deklaration unabhängig von der Position von const gleich bleibt. Unabhängig davon, ob Sie const T *obj oder T const *obj verwenden, schützen Sie die Daten, auf die obj zeigt, vor Änderungen.
Funktionszeiger: Ein ähnlicher Fall
Ein ähnlicher Fall Bei der Deklaration von Funktionszeigern entsteht folgende Situation:
void * function1(void); // Function returning void * void (* function2)(void); // Function pointer to a function returning void
Auch hier ermöglicht die Analyse der Sprachsyntax von links nach rechts diese alternativen Deklarationen.
Präferenzen und Anwendungsfälle
Letztendlich ist die Bevorzugung einer Syntax gegenüber einer anderen subjektiv. Es wird jedoch allgemein empfohlen, Folgendes zu verwenden:
Das obige ist der detaillierte Inhalt vonWarum sind „const T *obj' und „T const *obj' beide in C gültig und wann sollte ich sie verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!