Avatar ·

Que sont les points de séquence (sequence points) et comment sont-ils liés au comportement indéfini (undefined behavior) en C++ ?

Bonjour à tous ! J'ai commencé à apprendre le C++ et j'ai rencontré une situation très étrange. J'écris un code simple : ```cpp int i = 0; int result = i++ + i++; ``` Je m'attendais à ce que result soit égal à 1 (0 + 1), mais le compilateur donne tantôt 0, tantôt 1, voire un nombre complètement différent. Et si j'écris `i = i++ + 1`, le résultat est totalement imprévisible. On m'a dit que cela est lié aux "points de séquence" (sequence points) et au "comportement indéfini" (undefined behavior). Mais je ne comprends pas ce que c'est. Pouvez-vous expliquer en termes simples ? Pourquoi le compilateur ne peut-il pas simplement exécuter les opérations de gauche à droite ? Et comment savoir quand le code est sûr et quand il ne l'est pas ? Donnez, s'il vous plaît, des exemples de code correct et incorrect. <<>>

Que sont les points de séquence ?

Les points de séquence (sequence points) sont des moments dans l'exécution du programme où tous les effets secondaires des calculs précédents sont garantis d'être terminés, et les suivants n'ont pas encore commencé. En termes simples : ce sont des "points de contrôle" où l'état