Ich habe mich immer gefragt, was genau die richtige Position ist, um *
und &
zu setzen. Es scheint, dass C ++ ziemlich tolerant ist, wo diese Marken platziert werden.
Zum Beispiel habe ich scheinen Zeiger und kaufmännisches Zeichen links und rechts von einem Schlüsselwort oder in der Mitte von zwei Keywords, aber zum Verwechseln manchmal scheinen sie die gleiche Sache, vor allem wenn sie zusammen mit const
Die Beispiele sind nicht erschöpfend. Ich sehe sie überall, während sie erklärt oder an eine Funktion übergeben werden. Bedeuteten sie sogar dasselbe? Aber ich sehe auch Fälle, in denen *
das Objekt beeinflusst, das als Zeiger bezeichnet wird (wahrscheinlich der Fall, in dem *
zwischen zwei Schlüsselwörtern liegt).
BEARBEITET:
%Vor%Also habe ich das abgeschlossen:
%Vor%Trotzdem, das verwirrte die Hölle aus mir heraus. Kümmert sich der Compiler nicht um die Position und den dafür erforderlichen Abstand?
Bearbeiten: Ich möchte generell wissen, wo es um die Position geht. Wenn ja, in welchen Fällen.
Leerraum spielt nur insofern eine Rolle, als Token nicht zusammen laufen und (zum Beispiel) ein einzelnes Token erstellt wird, also (zB) int x
ist offensichtlich anders als intx
.
Wenn Sie mit etwas wie: int const*x;
zu tun haben, macht Whitespace in jeder Größe von *
überhaupt keinen Unterschied für den Compiler.
Die Differenz zwischen pointer to const int
und const pointer to int
hängt davon ab, auf welcher Seite von *
const steht.
Der Hauptunterschied besteht in der Lesbarkeit, wenn / wenn Sie mehrere Objekte in derselben Deklaration definieren / deklarieren.
%Vor%In der ersten könnte jemand denken, dass x und y Zeiger auf int sind - aber tatsächlich ist x ein Zeiger auf ein int und y ist ein int. Für die Augen einiger Leute spiegelt das zweite diese Tatsache genauer wider.
Eine Möglichkeit, Fehlinterpretationen zu vermeiden, besteht darin, immer nur ein Objekt zu definieren:
%Vor% Für jede von diesen ist korrekte Interpretation ziemlich einfach, wenn Sie Whitespace vollständig ignorieren (außer Ihnen zu sagen, wo ein Token endet und ein anderer beginnt, also wissen Sie, dass "const int" zwei Tokens ist) und lesen von rechts nach links *
als "Zeiger auf". Zum Beispiel: int volatile * const x;
wird gelesen als "x ist ein const Zeiger auf ein flüchtiges int".
Sowohl & amp; und * Platzierungen in der Variablendeklaration sind akzeptabel und hängen nur von Ihrem eigenen Geschmack ab. Sie meinen genau das Gleiche, indem Sie jeweils einen Zeiger und eine Referenz erstellen.
Die Platzierung des Schlüsselwortes const ist jedoch sehr wichtig, da int const* variable
einen konstanten Zeiger auf ein nicht-konstantes int deklariert und const int* variable
ein nicht konstanter Zeiger auf eine Konstante int.