Попытка узнать lvalues
, rvalues
и выделение памяти для них. Таким образом, с большим количеством учебных материалов есть немного хаоса.Как rvalues в C++ хранится в памяти?
rvalue
- это значение, которое должно существовать только в пределах выражения, в котором оно было создано (до C++ 11, по крайней мере). Таким образом, он имеет адрес и блок памяти, которые он занимает. Но по определению мы не можем получить адрес rvalue
, потому что это временный объект, в отличие от lvalue
. Но даже до C++ 11 нам удалось получить адрес rvalue
, вернув его из функции и сохранив в тип ссылки const (ну, я думаю, это не адрес, а значение).
Точнее, как работает rvalue
? Как долго программа или ОС действительно помнят место памяти, где rvalue
был создан и помечен как выделенный, а другой объект не может занять его место?
Как я вижу, сейчас rvalues
хранятся точно так же, как lvalues
, но мы просто имеем другие права доступа к ним. И у них есть другие типы освобождения - для lvalues
, выходящих из области видимости, для rvalues
может быть оптимизировано путем существования в пределах выражения или до тех пор, пока на нем больше нет ссылок.
lvalues и rvalues являются категориями выражений. Они не используют никакого хранилища. Использование хранилища - это * объекты *. (а иногда и ссылки). Кажется, вы пишете «rvalue», когда на самом деле вы имеете в виду «временный объект». –
Я не думаю, что rvalues должен иметь адрес вообще. Их можно просто оценить в реестрах. –
@ M.M, вы правы. –