Корутины в C++20 нарушают базовую интуицию о scope: локальные переменные могут пережить
} функции. Разбираем, как это реализовано.Обычная функция: локальные переменные в стеке, уничтожаются при
return. Корутина может быть приостановлена (co_await) и возобновлена позже — стека уже нет. Куда деваются локальные переменные? Task example() {
int x = 10; // где живёт x после co_await?
co_await someAwaitable();
std::cout << x; // x должен быть доступен!
}Компилятор переписывает корутину в конечный автомат. Все локальные переменные, которые живут через точку приостановки, переносятся в
coroutine frame — объект в куче:// Псевдокод того, что генерирует компилятор:
struct __example_frame {
int x; // из стека → в heap
int __state; // текущая точка возобновления
promise_type __promise;
};
Видимость имён не меняется —
x виден только внутри функции. Меняется место хранения: не стек, а heap. Деструкторы по-прежнему вызываются при выходе из scope — но «выход» теперь может произойти через co_return или уничтожение корутины.📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#константная_правильность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🤔1
😎 Топ-вакансий для C++ разработчиков за неделю
С разработчик — Удалёнка
Middle / Senior Разработчик C/C++ — Удалёнка/гибрид (Новосибирск)
Senior C Developer — от 350 000 ₽ Удалёнка
✍️ Еще больше топовых вакансий — в нашем канале C++ jobs
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
С разработчик — Удалёнка
Middle / Senior Разработчик C/C++ — Удалёнка/гибрид (Новосибирск)
Senior C Developer — от 350 000 ₽ Удалёнка
✍️ Еще больше топовых вакансий — в нашем канале C++ jobs
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст
👍1😁1
🛡️ C++26: безопасность наконец становится частью языка
Устали от багов с памятью, которые ломают прод в самый неподходящий момент? C++26 меняет правила игры:
▶️
▶️
▶️
▶️
▶️
📺 Больше подробностей в видео
Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#линкер_рекомендует
Устали от багов с памятью, которые ломают прод в самый неподходящий момент? C++26 меняет правила игры:
▶️
Contracts (контракты) — пишешь pre: прямо в объявлении функции, и компилятор/рантайм сам проверяет предусловия▶️
Standard Library Hardening — встроенная проверка индексов и указателей в STL, больше никаких тихих UB из operator[]▶️
Consteval как защита от UB — компилятор буквально запускает код как виртуальную машину и диагностирует неопределённое поведение на этапе компиляции▶️
Observable checkpoints — новый способ разбить код на «эпохи» с гарантированным наблюдаемым поведением между ними▶️
Erroneous behaviour — новая категория между UB и well-defined, которая даёт компилятору меньше свободы для «опасных» оптимизаций📺 Больше подробностей в видео
Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#линкер_рекомендует
👍4😁2