Was sind Sequenzpunkte (sequence points) und wie hängen sie mit undefiniertem Verhalten in C++ zusammen?
Hallo zusammen! Ich bin ein Anfänger in C++ und bin kürzlich auf das Konzept der "Sequenzpunkte" (sequence points) gestoßen. In vielen Foren wird geschrieben, dass ein Verstoß gegen die Regeln der Sequenzpunkte zu undefiniertem Verhalten (undefined behavior) führt, aber ich verstehe nicht ganz, was das in der Praxis bedeutet.
Hier ist ein einfaches Beispiel, das mich verwirrt:
```cpp
int i = 0;
int result = i++ + i++;
```
Ich habe irgendwo gelesen, dass dieser Code undefiniertes Verhalten verursacht. Aber warum? Auf den ersten Blick scheint das Ergebnis vorhersagbar: Zuerst wird der alte Wert von `i` (0) genommen, dann wird er erhöht, und das zweimal. Ich würde erwarten, dass `result` zu `0 + 1 = 1` wird und `i` zu `2`. Aber der Compiler sagt, dass das UB ist.
Ein weiteres Beispiel:
```cpp
int arr[5] = {0};
int i = 0;
arr[i] = i++;
```
Hier weise ich einem Array-Element einen Wert zu, wobei der Index selbst verändert wird. Ich verstehe nicht, welcher Indexwert verwendet wird – der alte oder der neue? Und warum gilt das als gefährlich?
Könnt