C
C/C++ Ready | Программирование
17.07.2026 11:12 · 👁 699
Интересный практический проект, собственная игра на C++ для портативной ретроконсоли!
В этой статье:
• Как организовать структуру небольшого игрового проекта
• Как устроить главный игровой цикл и переключение состояний
• Как разделить стартовый экран, игровой процесс и завершение игры
• Как собрать клон Google Dino и запустить его на реальном устройстве
Хороший способ посмотреть, как обычные классы, состояния и игровой цикл превращаются в законченную работающую игру.
Продолжай читать на Habr!
📣 C++ Ready | #статья
C
C/C++ Ready | Программирование
17.07.2026 09:12 · 👁 825
Пачку офферов заказывали?
О всех трудоустройствах через ИИ-ассистента Софи ребята узнают от пользователей.
И какой же кайф, когда они делятся своими историями.
Вот так в чате узнали сразу о трех новых офферах:
• Кейс Сергея - 2 недели в Софи и 2 оффера.
• Кейс Елены - 1 неделя в Софи и оффер спустя 10 лет перерыва в работе. Елене 52 года.
• Кейс Юлии - 1 месяц в Софи, свитчер из финансового аналитика в разработчика SQL. И еще один оффер🎉
Искренние поздравления ребятам и удачи им на новой работе!
В следующий раз доступ в Софи откроется уже 21 июля.
Если хочешь получить 3 дня бесплатного доступа - подписывайся на этот канал, все анонсы будут там.
C
C/C++ Ready | Программирование
16.07.2026 08:12 · 👁 1.1K
Интересная статья о том, как написать виртуальную машину на C++!
В этой статье:
• Как устроить цикл получения и выполнения опкодов
• Как представить память, регистры и состояние процессора
• Как добавлять собственные инструкции через набор обработчиков
Продолжай читать на Habr!
📣 C++ Ready | #статья
C
C/C++ Ready | Программирование
15.07.2026 11:12 · 👁 1.2K
std::string_view не владеет строкой и в этом легко ошибиться!
std::string_view хранит только указатель на символы и их количество. Он не копирует текст и не продлевает время жизни исходной строки.
Поэтому такой код опасен:
std::string_view name = make_name();
Если make_name() возвращает std::string, временная строка уничтожается в конце выражения. После этого name продолжает указывать на уже недействительную память.
Безопасный вариант сначала сохранить строку:
std::string name = make_name();
std::string_view view = name;
Теперь view можно использовать, пока существует name и операции со строкой не сделали указатель недействительным.
string_view хорошо подходит для параметров функций, которые только читают текст:
void print_name(std::string_view name) {
std::cout << name << '\n';
}
Такой метод принимает строковые литералы, std::string и другие непрерывные последовательности символов без лишнего копирования:
std::string user = "Alex";
print_name(user);
print_name("Admin");
А вот возвращать представление локальной строки нельзя:
std::string_view get_status() {
std::string status = "ready";
return status;
}
После выхода из функции status уничтожается, а возвращённый string_view становится висячим.
📣 C++ Ready | #совет
C
C/C++ Ready | Программирование
15.07.2026 09:12 · 👁 1.1K
IT мероприятия 🤘
Всё самое интересное для карьеры в IT: митапы, хакатоны, конференции, стажировки и обучение.
Подписывайся 🤘
1. Москва
2. Санкт-Петербург
3. Для стажеров и студентов
C
C/C++ Ready | Программирование
15.07.2026 07:12 · 👁 1.2K
Современный C++23 на компьютере с Windows 95!
В этой статье:
• Как получить совместимый 32-битный код современным компилятором
• Зачем объектные файлы передаются старому линкеру Visual C++
• Как заменить недоступные части стандартной библиотеки и работать через WinAPI
Продолжай читать на Habr!
📣 C++ Ready | #статья
C
C/C++ Ready | Программирование
14.07.2026 11:12 · 👁 1.3K
Почему чтение через map[key] может изменить контейнер?
Обращение через квадратные скобки выглядит как обычное получение значения:
std::cout << hits["api"];
Но если ключа "api" ещё нет, operator[] автоматически создаст его и добавит значение по умолчанию.
Для int таким значением будет 0:
std::map<std::string, int> hits;
std::cout << hits["api"]; // 0
std::cout << hits.size(); // 1
Получается, что код только читал значение, но размер контейнера изменился.
Если нужно найти ключ без вставки, используйте find():
auto it = hits.find("api");
if (it != hits.end()) {
std::cout << it->second;
}
Начиная с C++20 наличие ключа можно проверить через contains():
if (hits.contains("api")) {
std::cout << hits.at("api");
}
at() не создаёт новый элемент. Если ключ отсутствует, метод выбросит std::out_of_range.
При подсчёте событий поведение operator[], наоборот, очень удобно:
++hits["api"];
++hits["api"];
std::cout << hits["api"]; // 2
Используйте map[key], когда автоматическая вставка допустима. Для чтения без изменения контейнера выбирайте find(), contains() или at().
📣 C++ Ready | #совет
C
C/C++ Ready | Программирование
14.07.2026 07:12 · 👁 1.3K
Шпаргалка по форматированию вывода в C++!
Например, {:.2f} оставляет два знака после запятой, {:08} дополняет число нулями, а {:x} выводит его в шестнадцатеричном формате.
На картинке синтаксис библиотеки {fmt}: позиционные и именованные аргументы, выравнивание, ширина, точность, системы счисления, строки, указатели, диапазоны и кортежи.
Сохрани, чтобы не потерять!
📣 C++ Ready | #ресурс
C
C/C++ Ready | Программирование
13.07.2026 17:12 · 👁 1.4K
Измеряем время выполнения блока кода на C++!
Создадим небольшой RAII-таймер. Он начнёт измерение при создании и автоматически покажет результат при выходе из области видимости.
Сохраним название операции и время запуска:
class ScopeTimer {
std::string name_;
std::chrono::steady_clock::time_point start_;
Добавим конструктор:
public:
explicit ScopeTimer(std::string name)
: name_(std::move(name)),
start_(std::chrono::steady_clock::now()) {}
В деструкторе вычислим прошедшее время:
ScopeTimer() {
const auto elapsed =
std::chrono::steady_clock::now() - start_;
const auto microseconds =
std::chrono::duration_cast<
std::chrono::microseconds
>(elapsed);
Остаётся вывести результат и закрыть класс:
std::cout << name_ << ": "
<< microseconds.count()
<< " us\n";
}
};
Теперь измерим сортировку:
{
ScopeTimer timer("sorting");
std::ranges::sort(values);
}
После выхода из блока деструктор вызовется автоматически:
sorting: 1842 us
steady_clock подходит для измерения интервалов, потому что не зависит от перевода системных часов.
📣 C++ Ready | #практика
C
C/C++ Ready | Программирование
13.07.2026 15:12 · 👁 1.3K
😒 Официальная библиотека промптов для Claude от Anthropic
Разработчики из Anthropic обновили и структурировали масштабный хаб готовых запросов для своей языковой модели. База создана для того, чтобы пользователи могли выжать максимум из Claude при решении прикладных и технических задач, не тратя время на самостоятельный подбор формулировок.
⚡️Внутри собраны сотни шаблонов под самые разные сценарии:
🟦Для безопасности: готовые конструкции для проверки кода на уязвимости и анализа граничных условий работы алгоритмов.
🟦Для разработчиков: шаблоны для глубокого ревью кода, автоматического поиска багов, рефакторинга, написания юнит-тестов и проектирования архитектуры.
🟦Для автоматизации и менеджмента: промпты под стратегическое планирование, парсинг неструктурированных данных, генерацию технической документации и выстраивание логики для ИИ-агентов.
Каждый шаблон снабжен подробным разбором: авторы пошагово объясняют, почему выбрана именно такая структура запроса, как модель интерпретирует переменные и как правильно передавать контекст. Поскольку библиотека официальная, все промпты оптимизированы под особенности контекстного окна и логику мышления последних моделей семейства Claude.
❤️🩹Сохраняйте в закладки и внедряйте в свои рабочие процессы.
Нейросети отлично автоматизируют рутину и помогают искать уязвимости, но управлять ими может только тот, кто понимает саму базу и суть киберугроз.
Если вы хотите заложить мощный фундамент начните с нашего бесплатного курса (его прошли уже 1108 человек!).
🟦Разберетесь, как работают кибератаки и как грамотно защитить свои данные.
🟦Познакомитесь с направлениями и профессиями в кибербезопасности, чтобы выбрать свой трек.
🟦Получите скидку, если решите продолжить обучение в CyberYozh Academy.
👉 Начните бесплатно прямо сейчас
🦔 CyberYozh