Innerhalb einer while-Schleife, ist das letzte Komma-Anweisung zuletzt laufen getrennt garantiert?

StackOverflow https://stackoverflow.com/questions/4072578

Frage

Betrachten Sie das folgende (triviale) Code-Segment:

while (i++, i <= 10) {
  // some more code
}

Im allgemeinen Fall, C ++ ermöglicht Komma getrennt Aussagen in beliebiger Reihenfolge ausgewertet werden. Im Fall einer while-Schleife, sind wir zumindest garantiert (von der Spezifikation), dass die letzte Anweisung (die als Bedingung für die Schleife verwendet wird) zuletzt ausgewertet werden?

War es hilfreich?

Lösung

  

Im allgemeinen Fall, C ++ ermöglicht Komma getrennt Aussagen in beliebiger Reihenfolge ausgewertet werden.

Wenn Sie die Kommas zwischen Funktionsargumenten sich beziehen, das ist nur ein Trennzeichen.

In Ihrem Fall verwenden Sie die Komma-Operator , und das stellt eine Sequenz Punkt, dass garantiert, dass alle Nebenwirkungen von dem Komma des linken Operanden niedergelassen haben, bevor Sie die richtige Auswertung.

Also ja, ist es gut definiert.

Aus dem Bereich 5,18 / 1 der ISO C ++ 98-Standard:

  

Ein Paar von Ausdrücken durch ein Komma getrennt ausgewertet wird von links nach rechts, und dem Wert des linken Ausdrucks verworfen. Der L-Wert-zu-R-Wert (4,1), array-zu-Zeiger (4.2), und die Funktion-zu-Zeiger (4.3) Standardumwandlungen sind nicht auf den linken Ausdruck angewandt. Nebenwirkungen sind (1,9) der linken Ausdrucks, mit Ausnahme der Zerstörung von Provisorien (12.2) werden vor der Auswertung des rechten Ausdrucks durchgeführt. Die Art und   Wert des Ergebnisses ist die Art und den Wert des rechten Operanden; das Ergebnis ist ein L-Wert, wenn sein rechter Operand ist.

Andere Tipps

Ja. Der , Operator (es sei denn, überlastet!) Führt einen sogenannten Sequenzpunkt und in der Tat die Reihenfolge der Ausführung garantiert von links nach rechts.

Die obigen Ausführungen erklärt sie. Und eines der gemeinsamen Weg, um diese Methode des Missbrauchs ist

while(scanf("%d", &n), n){
    // do something
}

Dies wird gelesen ganze Zahl bis wir Null gelesen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top