Я намагаюся зрозуміти типи виразів C ++ і чим більше я читаю, тим я був більш розгубленим, оскільки мені здається, що проект C ++ дуже важкий для засвоєння, і тому віддаю перевагу іншим ресурсам, але вони або суперечать один одному, або не враховують, що формулювання та визначення між версіями C ++ сильно змінюються.
Далі я посилаюся на такі проекти:
- C ++ 11 [ n3690 ] (остаточний чернетка)
- C ++ 17 [ n4659 ] (остаточний чернетка)
- C ++ 20 [ n4835 ] (поточна чернетка)
C++11
3.10 Значення та оцінки... Перше значення ("чисте" значення) - це оцінку, яка не є xvalue. [Приклад: Результат виклику функції, тип повернення якої не є посиланням, є первинним значенням. Значення буквального типу, такого як 12, 7.3e5 або true, також є першим значенням. - кінцевий приклад]
C++17
3.10 Значення та оцінки... Першазна - це вираз, оцінка якого ініціалізує об'єкт або бітове поле, або обчислює значення операнду оператора, визначене контекстом, у якому він з'являється.
C++20
7.2.1 Категорії цінності *... Перше значення - це вираз, оцінка якого ініціалізує об'єкт або бітове поле або обчислює значення операнду оператора, визначене контекстом, у якому він відображається, або вираз, який має тип cv void.
Я розумів би зміни в формулюванні, і деякі корективи вносяться, але для мене все визначення змінюється. Може хтось допоможе мені зрозуміти це? Наприклад, чому було вилучено речення про те, що prvalue - це ревальє, що не є xvalue? Або чому корисний приклад видалили?