IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

opérateur d’incrémentation lvalue-rvalue


Sujet :

C++

  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2016
    Messages : 32
    Par défaut opérateur d’incrémentation lvalue-rvalue
    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 ?

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 734
    Par défaut
    Bonjour.

    Ton livre a donné la bonne explication, à savoir l'ordre de l'incrémentation et de l'affectation est inversé avec les deux syntaxes.

    Si on remplace la ligne 13 (avec i=2 et j=2) par des équivalents, ça donne :
    j = ++i équivaut à
    i = i+1; //i passe de 2 à 3;
    j = i; //j=3.
    et
    j = i++ équivaut à
    j = i; //j=2;
    i = i+1; //i passe de 2 à 3.

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2016
    Messages : 32
    Par défaut
    Je vois !!! Merci pour l'explication.

    Je clos le sujet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lvalue, rvalue et template
    Par camboui dans le forum C++
    Réponses: 6
    Dernier message: 27/09/2016, 21h59
  2. Réponses: 2
    Dernier message: 07/08/2014, 14h35
  3. lvalue rvalue ?
    Par FoX_*D i E* dans le forum Débuter
    Réponses: 4
    Dernier message: 23/12/2012, 11h41
  4. Rvalues et Lvalues
    Par deubelte dans le forum Débuter
    Réponses: 1
    Dernier message: 29/04/2010, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo