Время жизни временного объекта, к которому привязана локальная ссылка в сопрограмме C++.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Время жизни временного объекта, к которому привязана локальная ссылка в сопрограмме C++.

Сообщение Anonymous »

Что касается cppreference (который, как я понимаю, сам по себе не является стандартом C++), я читал, что состояние сопрограммы содержит «локальные переменные и временные, время жизни которых охватывает текущую точку приостановки.», (выделено мной), но я не думаю, что понимаю, как это работает.
Предположим, у меня есть сопрограмма, которая выглядит примерно так:

Код: Выделить всё

/*...*/ SomeCoroutine()
{
const auto& ref = std::string("abc");
co_yield ref.size(); // assume the coroutine really does suspend
co_return ref.size();
}
  • Перед приостановкой сопрограммы является ли ref локальной переменной в стеке или она действительно является членом состояния сопрограммы (в этом случае я сомневаюсь, что она действительно может быть ссылкой)?
  • После возобновления сопрограммы является ли ref локальной переменной в стеке или она действительно является членом состояния сопрограммы? Если это все еще ссылка, то висит ли она сейчас или строка каким-то образом скопировалась?
Я думаю, моя ошибка состоит в том, что я предполагаю, что ref является объектом. ref — это псевдоним материализованного временного объекта, и именно временное является объектом. Для меня это имело бы смысл, если бы само временное все время находилось в состоянии сопрограммы.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -coroutine
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»