Bonjour à tous,

Je suis tombé sur quelques choses d'assez curieux:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?