Zeiger und kaufmännische Und-Position mit const in C ++ [duplizieren]

8

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

verwendet werden %Vor%

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.

    
ryf9059 09.01.2013, 03:57
quelle

3 Antworten

12

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.

%Vor%

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".

    
Jerry Coffin 09.01.2013, 04:09
quelle
2
%Vor%

Alle oben genannten Punkte beabsichtigen, einen nicht konstanten Zeiger auf eine konstante ganze Zahl zu deklarieren.

Einfache Regel:

Wenn const nach dem * folgt, gilt es für den Zeiger, wenn nicht für das spitze Objekt. Der Abstand spielt keine Rolle.

    
Alok Save 09.01.2013 04:06
quelle
-1

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.

    
tsukasan 09.01.2013 04:08
quelle

Tags und Links