Próbuję zrozumieć typy wyrażeń C ++, a im więcej czytam, tym bardziej byłem zdezorientowany, ponieważ uważam, że szkic C ++ jest bardzo trudny do strawienia, dlatego wolę inne zasoby, ale albo one są sobie sprzeczne, albo nie biorą pod uwagę, że brzmienie i definicja między wersjami C ++ mocno się zmienia.
Poniżej odnoszę się do następujących szkiców:
- C ++ 11 [ n3690 ] (wersja ostateczna)
- C ++ 17 [ n4659 ] (wersja ostateczna)
- C ++ 20 [ n4835 ] (aktualny projekt)
C++11
3.10 Wartości lv i wartości... Wartość („czysta” wartość) to wartość, która nie jest wartością x. [Przykład: Wywołanie funkcji, której typem zwracanym nie jest odwołanie, jest prvalue. Wartość literału, takiego jak 12, 7,3e5, lub prawda, jest również wartością wstępną. - koniec przykładu]
C++17
3.10 Wartości lv i wartości... Wartość jest wyrażeniem, którego ocena inicjuje obiekt lub pole bitowe lub oblicza wartość operandu operatora, zgodnie z kontekstem, w którym się pojawia.
C++20
7.2.1 Kategorie wartości *... Wartość jest wyrażeniem, którego ocena inicjuje obiekt lub pole bitowe lub oblicza wartość argumentu operatora określonego w kontekście, w którym się pojawia, lub wyrażenie typu cv void.
Zrozumiałbym zmiany w brzmieniu i dokonano pewnych korekt, ale dla mnie zmienia się cała definicja. Czy ktoś może mi pomóc to zrozumieć? Na przykład dlaczego usunięto zdanie, że wartość jest wartością, która nie jest wartością x? Lub dlaczego pomocny przykład został usunięty?