Heim >Backend-Entwicklung >C++ >Const-Platzierung in C: „const T' vs. „T const' – Welche sollte ich verwenden?
In C kann das Schlüsselwort const verwendet werden, um Änderungen zu verhindern eines Objekts oder Zeigers. Überraschend für einige Entwickler ist, dass die Syntax variieren kann:
const Object* obj; // can't change data Object* const obj; // can't change pointer const Object* const obj; // can't change data or pointer Object const *obj; // same as const Object* obj;
Es stellt sich die Frage, welche Syntax zuerst kam und warum beide korrekt sind.
Historischer Ursprung der Const-Platzierung
Die Sprachgrammatik für C und C ermöglicht einen Parser von links nach rechts, was bedeutet, dass der Compiler Eingaben von liest von links nach rechts und verarbeitet Token, sobald sie auf sie stoßen.
Wenn beim Parsen der Deklaration das -Token verbraucht wird, ändert sich der Deklarationsstatus in einen Zeigertyp. Wenn const zuerst auf trifft, gilt das Qualifikationsmerkmal für die Zeigerdeklaration. Wenn es vor dem * angetroffen wird, gilt das Qualifikationsmerkmal für die referenzierten Daten.
Da sich die semantische Bedeutung aufgrund der Position von const nicht ändert, werden beide Platzierungen akzeptiert.
Implikationen für Funktionszeiger
Eine ähnliche Situation ergibt sich bei Funktionen Zeiger:
Wieder einmal ist die Interpretation des Links-nach-rechts-Parsers in der deutlich erkennbar Syntax.
Bevorzugte Verwendung
Letztendlich gibt es keine klare Präferenz für eine Syntax gegenüber der anderen. Die Auswahl sollte auf der Grundlage der Lesbarkeit und der Entwicklerpräferenzen getroffen werden.
Wenn jedoch Konsistenz mit der Syntax von Zeigern und Funktionszeigern gewünscht wird, ist die Verwendung von const links vom referenzierten Typ möglicherweise angemessener:
const Object* obj; // no change to obj pointer or value Object const *obj; // no change to obj pointer or value
Das obige ist der detaillierte Inhalt vonConst-Platzierung in C: „const T' vs. „T const' – Welche sollte ich verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!