Bonjour,
Dans un programme, je lis une instruction du type:
toto = (toto++)%5;
est-ce bien equivalent a :
toto = toto%5;
toto++;
ou a autre chose ???
Merci d'avance
Version imprimable
Bonjour,
Dans un programme, je lis une instruction du type:
toto = (toto++)%5;
est-ce bien equivalent a :
toto = toto%5;
toto++;
ou a autre chose ???
Merci d'avance
Si ça fonctionne comme en Java , oui c'est équivalent.
Oui.
Personnellement je n'aime pas du tout ce genre de philosophie "en écrire le plus possible sur une seule ligne". Pour peu qu'une expression soit un peu plus complexe que ça et que le développeur n'ai pas pris le temps de commenter, c'est parfait pour perdre du temps lors de la relecture.
Il me semble que c'est un comportement indéfini en C++, car la variable toto est modifiée deux fois dans la même instruction. Si quelqu'un peut confirmer...Cette écriture est de toute façon à préférer, car elle est plus claire et sans ambigüité.Citation:
toto = toto%5;
toto++;
L'incrémentation ne sert a rien puisque toto sera de toute façon réaffecté avec le résultat de l'opération.
Ce serait plutôt équivalent à ça :
Code:toto = (toto + 1) % 5;
Je dirais plutôt que
etCode:
1
2
3 toto = ++toto % 5 serait équivalent à toto = (toto + 1) % 5;
Mais je ne suis pas sûr non plus que l'incrémentation se fasse avant l'assignation ou vice-versa, et peut-être que ce n'est pas défini.Code:
1
2
3
4 toto = toto++ % 5 serait équivalent à toto = toto % 5; toto = toto + 1;
Donc +1 pour une forme plus explicite.
OUICode:
1
2
3 toto = ++toto % 5 serait équivalent à toto = (toto + 1) % 5;
Non l'incrémentation se fait au moment du calcul donc c'est équivalent àCode:
1
2
3
4 toto = toto++ % 5 serait équivalent à toto = toto % 5; toto = toto + 1;
donc le toto++ ne sert à rienCode:
1
2
3
4 titi = toto % 5; toto = toto + 1; toto = titi
Moi je parie sur l'indéfinie
toto = toto++ % 5
peut aussi bien être équivalent à :
queCode:
1
2 toto = toto % 5; toto = toto + 1;
Code:
1
2
3 tmp = toto % 5; toto = toto +1; toto = tmp;
Bizare, sur mon compilateur j'ai x=3 et y=2.Code:
1
2
3
4
5 int x=7; x=(x++)%5; int y=7; y=(y)%5;
Donc je pense comme Mongaulois
tu regarder ce thread
ca commence ici
http://www.developpez.net/forums/sho...&postcount=229
et ca en parle mieux a partir d'ici
http://www.developpez.net/forums/sho...40#post2473540
Confirmé. Pour être plus précis, modifier deux fois une variable sans point de séquencement entre est un comportement indéfini de même que lire une variable et la modifier sauf si la lecture est nécessaire à la détermination de la nouvelle valeur (par exemple a++ + a)
Je crois que cet echange démontre clairement le point de vue (philosophie) de NiamorH.
Perdre du temps pour comprendre queque chose d'aussi trivial n'est pas enrichissant.
Pour moi les opérateurs d'incrémentations doivent figurer seuls et ne pas apparaître dans une expression.