Ich versuche, Ausdruckstypen von C ++ zu verstehen, und je mehr ich lese, desto verwirrter war ich, da ich den C ++ - Entwurf sehr schwer zu verdauen finde und daher andere Ressourcen bevorzuge, aber sie widersprechen sich entweder oder berücksichtigen nicht, dass die Wortlaut und Definition zwischen C ++ - Versionen ändern sich stark.
Im Folgenden beziehe ich mich auf folgende Entwürfe:
- C ++ 11 [ n3690 ] (endgültiger Entwurf)
- C ++ 17 [ n4659 ] (endgültiger Entwurf)
- C ++ 20 [ n4835 ] (aktueller Entwurf)
C++11
3.10 LWerte und rWerte... Ein Wert ("reiner" Wert) ist ein Wert, der kein x-Wert ist. [Beispiel: Das Ergebnis des Aufrufs einer Funktion, deren Rückgabetyp keine Referenz ist, ist ein Wert. Der Wert eines Literals wie 12, 7.3e5 oder true ist ebenfalls ein Wert. - Beispiel beenden]
C++17
3.10 LWerte und rWerte... Ein Wert ist ein Ausdruck, dessen Auswertung ein Objekt oder ein Bitfeld initialisiert oder den Wert des Operanden eines Operators berechnet, der durch den Kontext angegeben wird, in dem er angezeigt wird.
C++20
7.2.1 Wertekategorien *... Ein prvalue ist ein Ausdruck, dessen Auswertung ein Objekt oder ein Bitfeld initialisiert oder den Wert eines Operanden eines Operators berechnet, der durch den Kontext angegeben wird, in dem er angezeigt wird, oder einen Ausdruck vom Typ cv void.
Ich würde die Wortlautänderungen verstehen und einige Anpassungen vornehmen, aber für mich ändert sich die gesamte Definition. Kann mir jemand helfen, das zu verstehen? Warum wurde zum Beispiel der Satz entfernt, dass ein Wert ein r-Wert ist, der kein x-Wert ist? Oder warum wurde das hilfreiche Beispiel entfernt?