В этой статье:
• Использование consteval для вычислений во время компиляции
• Настройка компилятора MSVC под Windows: vcvars64.bat, /std:c++latest
• Реализация логики Game of Life на 16×16 сетке с wrap-around
🔊 Советую продолжить читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍7🔥6🤝1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥42👍12❤6🤝3
❤6👍6🔥5
Корутины — это функции, выполнение которых можно приостанавливать и продолжать. Они позволяют писать асинхронный и ленивый код без громоздких колбэков и сложного состояния.
Что важно знать:
• Три ключевых оператора: co_await, co_yield, co_return.
• Можно создавать генераторы, которые возвращают значения по одному.
• Асинхронные функции выглядят как обычные — без вложенности и запутанных цепочек вызовов.
Это мощный инструмент современного C++, который легко интегрируется с другими фичами языка.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥32👍8❤6🤝1
Останавливаем потоки безопасно с std::jthread
Сейчас научимся правильно завершать потоки в C++. Без
Для начала подключим библиотеки. Чтобы код был короче, добавим using namespace std:
Теперь напишем рабочую функцию. Она будет печатать счётчик каждую секунду. Когда придёт сигнал остановки, поток завершится сам:
Запускаем поток через
Вот что выведет программа:
🔥 Таким образом ты можешь писать потоки проще — с автоматическим управлением и встроенной остановкой.
📣 C++ Ready | #практика
Сейчас научимся правильно завершать потоки в C++. Без
detach
, без ручного join
, без флагов. Для начала подключим библиотеки. Чтобы код был короче, добавим using namespace std:
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
Теперь напишем рабочую функцию. Она будет печатать счётчик каждую секунду. Когда придёт сигнал остановки, поток завершится сам:
void worker(stop_token st) {
int tick = 0;
while (!st.stop_requested()) {
cout << "Tick " << tick++ << '\n';
this_thread::sleep_for(chrono::seconds(1));}
cout << "Поток завершён корректно.\n";
}
Запускаем поток через
jthread
. Ждём немного и просим его остановиться. Никаких join()
вызывать не нужно — всё делается автоматически:int main() {
jthread t(worker);
this_thread::sleep_for(chrono::seconds(3));
t.request_stop();
}
Вот что выведет программа:
Tick 0
Tick 1
Tick 2
Поток завершён корректно.
🔥 Таким образом ты можешь писать потоки проще — с автоматическим управлением и встроенной остановкой.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥10👍8😁1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍7❤6😁1
В этой задаче создаём консольную утилиту, которая переводит числовое значение из одной единицы измерения в другую прямо из терминала.
В этой задаче:
• Принимаем на вход 3 аргумента — число, исходную единицу и целевую единицу.
• Проверяем, что обе единицы входят в список поддерживаемых (m, cm, km, g, kg, l, ml).
• Используем unordered_map с коэффициентами и сначала переводим значение в базовую единицу, затем — в нужную.
Такой инструмент удобен, когда нужно быстро пересчитать метры в сантиметры, граммы в килограммы или литры в миллилитры, не покидая командную строку.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍7❤6🤝1