Ja, das ist Undefiniertes Verhalten , weil Sie versuchen, die zweite Regel zu verletzen.
Der Standard besagt, dass
1) Zwischen dem vorherigen und dem nächsten Sequenzpunkt darf ein gespeicherter Wert eines Objekts höchstens einmal durch die Auswertung eines Ausdrucks geändert werden.
2) Darüber hinaus darf nur auf den vorherigen Wert zugegriffen werden, um den zu speichernden Wert zu bestimmen .
Hinweis : Die Reihenfolge der Auswertung der Operanden von *
operator ist unspezifiziert und *p
ist nichts als i
.
Ja - entweder ++ i oder * p (was i ist) kann zuerst ausgewertet werden.
Tags und Links c++ undefined-behavior