Wikipedia sagt, dass Sequenzpunkte in C++11 veraltet sind. Was bedeutet das? Bedeutet das, dass undefinierte Verhaltensweisen aufgrund von Sequenzpunkten keine Auswirkungen haben?
Antworten
Zu viele Anzeigen?Ein großes Problem mit dem Begriff "Sequenzpunkt" ist, dass er eine Art von absoluter Sequenzierung suggeriert, die es nie gab. Betrachten Sie den Ausdruck a = (b(),c()) + d();
Es gibt einen Sequenzpunkt zwischen b()
y c()
aber das bedeutet nicht, dass alles andere als klar vor der Zeit beschrieben werden kann. c()
oder deutlich nach b()
. Es wäre möglich, dass b()
, c()
und d()
zu bewerten in der Reihenfolge bcd
, bdc
o dbc
. Die Terminologie der "Sequenz"-Punkte machte das nicht wirklich deutlich, aber die neuere Terminologie schon.
Der Begriff "Sequenzpunkt" ist veraltet, um eine klarere Erklärung zu geben. Die Sprache C++ sollte sich nicht ändern.
Weitere Informationen finden Sie unter aquí
Die Formulierung "Sequenzpunkt" wurde zugunsten eindeutigerer Formulierungen wie "sequenziert vor" veraltet. Sequenzpunkte waren bereits schwer zu verstehen. Durch die Hinzufügung von Multithreading ist es fast unmöglich, mit ihnen umzugehen, daher wurden sie (zumindest größtenteils) zugunsten anderer Formulierungen abgeschafft.