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

Contribuez Discussion :

Ajout dans le FAQ


Sujet :

Contribuez

  1. #1
    Membre à l'essai
    Ajout dans le FAQ
    Bonjour,

    Apres quelques recherches sur le net j'ai finalement compris ce qu'est une lvalue ("location value") ou une rvalue ("read value"). Voila le truc c'est que c'est assez flou et qu'il n'y a pas vraiment de réponse (solide) et facilement accessible sur le net en francais, mais plutot une somme de topic qui réponde plus ou mois au sujet de façon plus ou moins bien. Je me disais qu'il serait bien d'ajouté une explication sur ces 2 notions dans la FAQ c puisque le compilo nous sort parfois ces termes.

    Bien à vous

  2. #2
    Expert éminent sénior
    Tu peux trouver une explication plus détaillée ici: http://en.cppreference.com/w/c/langu...value_category

    Une lvalue peut ne pas être modifiable.

    La différence principale, c'est qu'une rvalue n'est pas matérialisée par un objet en mémoire, donc que son adresse ne peut pas être prise
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre à l'essai
    lvalue et rvalue
    Bonjour,

    en-effet je n'ai pas eu le reflex d'aller voir le FAQ cpp, une rvalue, si j'ai bien compris, c'est un élément temporaire et non permanent au contraire d'une lvalue qui ce définirai comme un identifiant de valeur qui permet celle-ci de devenir permanente. En gros si j'ai une erreur du type "you try to assign a lvalue line xxx", il me dis que j'essaye d'assignée un identifiant (qui n'est alors que quelque chose de sémantique) comme étant une valeur, un peux comme si j'essayer d'enregistrer une partie de code tel que nous l'écrivons, dans une variable...

    Je voudrai juste rappeler si des gens viennent à lire ce topic que la compression d'un langage par un ordinateur au moment de la compilation s'effectue en trois étapes (on ne parle pas de la "chaîne de compilation" ici mais plutôt du principe algorithmique de conversion d'un langage en binaire) :

    -> l'aspect lexicale, définit les symbole ou les caractère qui servent à la rédaction du programme.
    -> l'aspect syntaxique, définit l'ensemble des règle grammaticale qui permet l'assemblage des mot dans une phrase.
    -> l'aspect sémantique qui étudie la signification d'une phrases.

    On retrouve ici la définition d'un langage de haut niveaux, ce n'est qu’après avoir effectuer l'analyse lexicale, syntaxique puis sémantique que le compilateur sera apte à transformer le code source en binaire. La notion de lvalue et rvalue, sont des notions qui touche alors à la sémantique du code source et au sens même des phrases de code. Dans une phrase du type:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    x = 8;


    x sera alors l'identifiant de la valeur 8 et donc a proprement parler une lvalue tandis que 8 si on n'utilise pas x par la suite, il sera impossible de le retrouvé c'est alors une rvalue (hormis récrire 8). Si maintenant on écris:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    y = x;


    y ne prendra pas la valeur 'x' à proprement parler mais la valeur que x identifie c'est dire 8. Dans certain qu'a dans le langage c le compilateur peux nous grondé dessus et nous dire qu'a la phase d'analyse sémantique il à compris que l'on essaye d'assigné à y le terme 'x' (qui pour lui ne corresponds pas à un char mais à un terme du language une lvalue). Ca ne nous arrivera jamais de tomber sur cette erreur pour le cas ci-dessus; mais plus souvent et par exemple lors de la manipulation de tableaux.

    Dans ce dernier cas on peux donc identifier la notion de "location value" qui permet de localiser, de retrouver une valeur et de "read value", la valeur que l'ordinateur lit quand on effectue "y = x" c'est à dire 8.

  4. #4
    Membre expérimenté
    Mince, j'ai toujours pensé que le "L" c'était pour "Left", et "R" pour "Right"...

  5. #5
    Expert éminent sénior
    C'est pourtant la raison de ces noms. Initialiement.
    une lvalue peut être à gauche d'un =, pas une rvalue.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  6. #6
    Membre à l'essai
    Je ne comprends pas...
    Citation Envoyé par ternel Voir le message
    C'est pourtant la raison de ces noms. Initialiement.
    une lvalue peut être à gauche d'un =, pas une rvalue.
    C'est le "peut" qui rend l'usage de ce nom ("left value") absurde. En-effet un lvalue peux ce trouver à droite (sémantiquement parlant) bien que ce soit en réalité une référence à une rvalue...
    https://msdn.microsoft.com/fr-fr/library/f90831hc.aspx

###raw>template_hook.ano_emploi###