Wie man einen Komplex C ++ Expression Lesen

C ++ ist voll von kleinen Symbole, von denen jede auf die Bedeutung der Ausdrücke hinzufügt. Die Regeln von C ++ Grammatik sind so flexibel, dass diese Symbole in fast unübersichtliches Kombinationen kombiniert werden können. Ausdrücke in der einfacheren Sprache C kann so stumpf bekommen, dass es verwendet wird für einen jährlichen Wettbewerb zu sein, die das dunkelste Programm schreiben könnte, und wer es verstehen konnte.

Es ist nie eine gute Idee, um zu versuchen, komplexen Code zu schreiben, aber Sie werden manchmal über Ausdrücke in C ++ ausführen, die ein wenig verwirrend auf den ersten Blick sind. Verwenden Sie einfach die folgenden Schritte, um sie, um herauszufinden:

  1. Beginnen Sie an den meisten Embedded-Klammern.

    Starten Sie für die äußeren meisten Klammern suchen. Innerhalb diejenigen, suchen Sie nach eingebetteten Klammern. Wiederholen Sie den Vorgang, bis Sie Ihren Weg in die tiefste Klammerpaar gearbeitet habe. Beginnen Sie, dass subexpression Auswertung zunächst die folgenden Regeln. Sobald Sie diesen Ausdruck verstehen, Pop, den Prozess zurück, um die nächste Stufe und wiederholen.

  2. Innerhalb des Klammernpaar, zu bewerten jede Operation in der Rangfolge.

    Die Reihenfolge, die Operatoren ausgewertet werden durch den Bediener der Vorrang in der Tabelle gezeigt bestimmt. Indirection kommt vor der Multiplikation, die somit vor der Zugabe kommt folgendes hinzufügt 1 plus 2 mal der Wert bei mit * ptr zeigt.

int i = 1 + 2 * * ptr-
Operatoren in der Reihenfolge der Präzedenz
VorrangOperatorBedeutung
1() (Einstellige)Aufrufen einer Funktion
2* Und -> (einstellige)Dereference einen Zeiger
2- (Einstellige)Gibt die negativen ihres Arguments
3++ (Einstellige)Zuwachs
3-- (Einstellige)Decrement
4* (Binär)Multiplikation
4/ (Binär)Aufteilung
4% (Binär)modulo
5+ (binär)Zusatz
5- (binär)Subtraktion
6 (binär)Logisches UND
6!!Logisches ODER
7=, * =,% =, + =, - = (Sonder-)Zuordnungsarten
  1. Bewerten Sie Vorgänge der gleichen Priorität von links nach rechts (mit Ausnahme Zuordnung, die in die andere Richtung geht).

    Die meisten Betreiber von gleicher Priorität auswerten von links nach rechts. Somit folgende addiert 1 zu 2 und addiert das Ergebnis zu 3:

    int i = 1 + 2 + 3 

    Die Reihenfolge der Bewertung einiger Betreiber keine Rolle spielt. Zum Beispiel arbeitet zusätzlich dasselbe von links nach rechts, wie es von rechts nach links macht. Die Reihenfolge der Auswertung macht einen großen Unterschied für einige Operationen wie Division. Die folgenden Gräben 8 durch 4 und teilt das Ergebnis durch 2:

    i = int 04.08 / 2-

    Die wichtigste Ausnahme von dieser Regel ist Zuordnung, die von rechts nach links ausgewertet wird:

    a = b = c-

    Dies weist c zu b und das Ergebnis ein.

  2. Bewerten Sie Teilausdrücke in keiner bestimmten Reihenfolge.

    Betrachten Sie den folgenden Ausdruck:

    int i = f () + g () * h () -

    Die Multiplikation eine höhere Priorität hat, so dass man davon ausgehen kann, dass die Funktionen g () und h () vor f genannt werden (), dies ist jedoch nicht der Fall. Funktionsaufruf hat die höchste Priorität von allen, so dass alle drei Funktionen aufgerufen werden, bevor entweder die Multiplikation oder die Zugabe durchgeführt wird. (Die zurückgegebenen Ergebnisse von g () und h () multipliziert und dann zu den Ergebnissen f () zurückgegeben.)

    Das einzige Mal, dass die Ordnung, die Funktionen aufgerufen werden, einen Unterschied macht, ist, wenn die Funktion Nebenwirkungen, wie eine Datei oder ein Ändern des Werts einer globalen Variablen Öffnung aufweist. Sie sollten auf jeden Fall nicht Ihre Programme schreiben, so dass sie sich auf diese Art von Nebenwirkungen ab.

  3. Führen Sie alle Typkonvertierungen nur bei Bedarf.

    Sie sollten nicht mehr Typkonvertierungen als unbedingt notwendig zu machen. Zum Beispiel hat der folgende Ausdruck mindestens drei und möglicherweise vier Typkonvertierungen:

    float f = a + 1-

    Die Zeichen 'a' muss in einen int gefördert werden, um die Addition auszuführen. Die int wird dann einem Doppel umgewandelt und dann auf eine einzige Präzisions float umgewandelt. Denken Sie daran, dass alle Arithmetik durchgeführt wird, entweder in int oder double. Sie sollten in der Regel die Durchführung Arithmetik auf Charaktertypen zu vermeiden und mit einfacher Genauigkeit Schwimmer ganz zu vermeiden.

Menü