Citation Envoyé par Loralina
NoSmoking :
Oui, mais de quelle utilisation est-il question ?
C'est la valeur qui va être retournée.


Citation Envoyé par Loralina
Et qui reçoit oldValue ?
Un registre de travail interne, comme dans bien des fonctions, pour être passée à la variable liée à l'expression.


Quand on fait b=(a++)+1, l'utilisation correspond à l'évaluation progressive de l'expression, c'est l'expression (j'ajoute (13h11) : je devrais plutôt dire la variable interne associée ou du moins l'évaluation de l'expression) qui reçoit oldValue, on n'est pas encore à l'étape de l'affectation à b.
Maintenant, si on a juste b=a++, c'est pareil comme le montre le script que je viens de mettre, l'expression reçoit oldValue, a est incrémentée, et enfin l'affectation de l'expression à b est faite.
C'est ce qui se passe en interne lors de l'évaluation de l'expression, on affecte à b le résultat de l'expression a++.

Que fait l'expression a++ ?
  • Rt(registre de travail) <- valeur de a
  • a <- a +1
  • return Rt

c'est comme si l'on écrivait b = a; a = a +1; ou mieux rt = a; a = a +1; b = rt;
Oui, mais je trouve ça dommage car au final presque tout le monde a une fausse idée de l'ordre des opérations.
Techniquement OUI l'incrémentation se fait avant le retour, sinon cela serait non réalisable, mais pratiquement on ne peut pas utiliser la valeur incrémentée avant l'affectation du résultat de l'expression.


C'est le même principe pour les comparaisons et le return dans une fonction (le retour de l'expression finale s'effectue après toutes les post incrémentations).
Oui mais la post incrémentation sur le return n'est pas exploitée.