J'essaie de comprendre les types d'expression de C ++ et plus je lis, plus je suis confus, car je trouve le brouillon C ++ très difficile à digérer et préfère donc d'autres ressources mais elles se contredisent ou ne tiennent pas compte du fait que le la formulation et la définition entre les versions C ++ changent considérablement.
Dans ce qui suit, je me réfère aux projets suivants:
- C ++ 11 [ n3690 ] (version finale)
- C ++ 17 [ n4659 ] (version finale)
- C ++ 20 [ n4835 ] (version actuelle)
C++11
3.10 Lvalues et rvalues... Une valeur pr (valeur "pure") est une valeur r qui n'est pas une valeur x. [Exemple: Le résultat de l'appel d'une fonction dont le type de retour n'est pas une référence est une valeur. La valeur d'un littéral tel que 12, 7.3e5 ou true est également une valeur. - fin exemple]
C++17
3.10 Lvalues et rvalues... Une valeur est une expression dont l'évaluation initialise un objet ou un champ de bits, ou calcule la valeur de l'opérande d'un opérateur, comme spécifié par le contexte dans lequel elle apparaît.
C++20
7.2.1 Catégories de valeurs *... Une valeur est une expression dont l'évaluation initialise un objet ou un champ binaire, ou calcule la valeur d'un opérande d'un opérateur, comme spécifié par le contexte dans lequel elle apparaît, ou une expression de type cv void.
Je comprendrais les changements de formulation, et certains ajustements sont apportés, mais pour moi, la définition entière change. Quelqu'un peut-il m'aider à comprendre cela? Par exemple, pourquoi la phrase a-t-elle été supprimée selon laquelle une prvalue est une rvalue qui n'est pas une xvalue? Ou pourquoi l'exemple utile a-t-il été supprimé?