@Carver182
инженер-программист

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

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

Насколько я понимаю, переменная out, включая и то на что она ссылается, должно уничтожится и за ее пределами не должно быть возможности использовать эту ссылку и данные т.к. это все на стеке. Но, возвращенное ею значение печатается и им можно спокойно манипулировать. Почему?
  • Вопрос задан
  • 1068 просмотров
Решения вопроса 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. Возможны оптимизации, но суть такая.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы