opérateur d’incrémentation lvalue-rvalue
Bonjour à tous,
Je suis tombé sur quelques choses d'assez curieux:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
#include <iostream>
#include <string>
using std::cout;
using std::endl;
int main()
{
int i = 0;
int j;
j = ++i;
j = ++i;
j = ++i;
cout << "valeur de i: " << i <<endl;
cout << "valeur de j: " << j <<endl;
/*Affiche bien 3 et 3 */
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
#include <iostream>
#include <string>
using std::cout;
using std::endl;
int main()
{
int i = 0;
int j;
j = ++i;
j = i++;
j = i++;
cout << "valeur de i: " << i <<endl;
cout << "valeur de j: " << j <<endl;
/*Affiche 3 et 2*/
} |
Comment se fait t'il que j'ai deux résultats différents ?
D'après le livre que je possède il explique que mon opérateur d'incrémentation à deux forme: une préfixe et postfixe.
Lors d'un préfix, pour une lvalue, il ajoute 1 et change la valeur modifiée par l'opérande.
Dans le cas d'un postfix, pour une rvalue, il ajoute 1 et renvoie une copie de la valeur originale.
Avez-vous d'autres choses à rajouter sur ce sujet ?