
Envoyé par
hsazerty
Salut !
voilà l'explication trouvée dans le livre pour expliquer le résultat :
"
Dans l'affectation de x, n est d'abord incrémenté à 6 puis est décrémenté à 5 avant que l'opérateur de multiplication ne soit évalué, ce qui conduit au calcul de 5*5. A la dernière ligne, les trois sous-expressions sont évaluées de droite à gauche. L'associativité à gauche de l'opérateur de sortie << est sans objet parce qu'il n'y a pas d'autre opérateur de même niveau de préséance."
Ils ont l'air de savoir ce qu'ils disent, mais j'ai rien compris !
Si ça fonctionne comme les arguments d'une fonction, ça va dépendre des options de compilation...
Exemple :
1 2 3 4
| void SampleFunction(int i, int j, int k)
{
std::cout << i << _T(" ") << j << _T(" ") << k << std::endl;
} |
ensuite on prend une pile qu'on remplie :
1 2 3 4
| std::stack<int> Pile;
Pile.push(1);
Pile.push(2);
Pile.push(3); |
Ensuite on apelle notre fonction :
SampleFunction(Pile.pop(), Pile.pop(), Pile.pop());
Qu'est-ce qui se passe ???
Ben ça dépend de plein de choses :
- Si on est en __stdcall, __fastcall, __thiscall, ...
- D'option du compilo
Il est surement possible que la méthode pop de la librairie standard ne retourne pas la la valeur qui se trove qur le dessus de la pile, mais il est tout à fait possible de créer une pile qui s'utiliserai comme dans mon exemple...
Je trouve donc aussi que c'est débile de faire un exemple d'usage d'opérateur dans ce cadre la.... surtout si c'est pour des débutants !!!
Partager