Задать вопрос
@Carver182
инженер-программист

Какое время жизни у переменной?

std::forward_list <T> copy_list(const std::forward_list<T>& in)
{
    auto out = in;
    out.reverse();
    return out;
}

Насколько я понимаю, переменная out, включая и то на что она ссылается, должно уничтожится и за ее пределами не должно быть возможности использовать эту ссылку и данные т.к. это все на стеке. Но, возвращенное ею значение печатается и им можно спокойно манипулировать. Почему?
  • Вопрос задан
  • 1084 просмотра
Подписаться 3 Сложный Комментировать
Решения вопроса 1
@MarkusD Куратор тега C++
все время мелю чепуху :)
auto out = in;
Тип переменной `out` будет `std::forward_list<T>`. [Пояснение 1], [Пояснение 2]

Поэтому `out ` будет локальной переменной и будет иметь локальное время жизни.
Исключением может быть только temporary lifetime extension. Тогда время жизни переменной продлится.
The lifetime of a temporary object may be extended by binding to a const lvalue reference or to an rvalue reference (since C++11), see reference initialization for details.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
В стеке отдельно резервируется место под возвращаемое функцией значение, и именно туда, а не по адресу переменной out, записывается результат через return. И, соответственно, дальше работа происходит именно по адресу с возращенным значением.
Ответ написан
Комментировать
zencd
@zencd
Переменная и её значение - разные вещи. У переменной ограниченное время жизни, scope. Значением же можно пользоваться и дальше потому что значение будет скопировано, вызовется copy constructor. Возможны оптимизации, но суть такая.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы