Выражения rvalue и lvalue в С++

Понятия lvalue и rvalue применяются к выражениям, появились еще в языке Си и были расширены для С++.

Копии rvalue в общем случае конструируются перемещением (малые затраты ресурсов), в то время как копии lvalue обычно конструируются копированием (большие затраты ресурсов).

gvalue (generalized value)

- Обладают идентичностью - возможностью определить что два объект ссылаются на одну сущность (у значения есть адрес).
- Могут быть неявно преобразованы в prvalue. - Не могут иметь тип void.

rvalue (read value или right value)

- Нельзя получить адрес rvalue в памяти.
- Можно перемещать.
- Не могут находиться в левой части оператора присваивания или составного присваивания.
- Не обладают идентичностью.
- Не могут иметь тип void.
- Ссылки с двойным амперсандом это rvalue ссылка void func(int&& a){:}
- Для преобразования lvalue выражения в rvalue служат функции std::move() и std::forward()

lvalue (locator value или left value)

- Можно получить адрес в памяти.
- Есть идентификатор.
- Нельзя перемещать.
- Может стоять и слева и справа от оператора присваивания.
- Обладают идентичностью.
- Выражение в левой части присваивания и не const.
- Ссылки с одиночным амперсандом это lvalue ссылка void func(int& a){:}

xvalue (eXpiring value)

- Ссылка rvalue срок действия которой истекает

prvalue (pure value)

- Выражение имеющее тип cv void (constant volatile)
2023-10-22



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

Оператор and альтернатива оператору "Логическое И" &&
Оператор and_eq - альтернатива оператору &= (Побитовое И)
asm ключевое слово С++. Включение блока кода на языке ассемблер в код С++.
auto C++, автоматическое вычисление компилятором типа переменной
bitand оператор С++ альтернативный "Побитовое И" &
bitor оператор языка С++ аналогичный "Побитовому ИЛИ" |
bool логический тип данных в С++
break оператор завершения ближайшего цикла или case в С++
case оператор С++ для выполнения блока кода при совпадении целочисленного значения в операторе switch
catch оператор С++ для ловли исключений
class ключевое слово C++ для задания класса
compl оператор C++ альтернативный "Побитовая инверсия" ~
const ключевое слово С++
consteval спецификатор С++20 указывающий что каждый вызов функции должен создавать константы времени компиляции
constexpr спецификатор С++11 означающий что значение переменной или результат работы функции должны рассчитываться на этапе компиляции
const_cast оператор приведения типов для добавления или удаления cv-квалификаторов С++
dynamic_cast С++ преобразование указателей или ссылок на объект
false C++, логическое "Ложно" C++
inline C++ вставка кода функции в месте вызова
Ключевые слова в С++
namespace С++ пространство имен
noexcept в C++
register С++ зарезервированное ключевое слово
return C++ выход из функции с возвратом результата
Выражения rvalue, lvalue, gvalue, xvalue, prvalue.
throw C++ принудительное выбрасывание исключений
true C++ логическое истинно и любое число кроме нуля
try C++ начинает блок кода в котором ловятся исключения
using C++ создание псевдонимов и импорт из пространства имен
volatile С++ запрет оптимизации объекта который может измениться извне