Короткие заметки о языке C и C++: тонкости синтаксиса, поведение компилятора, подводные камни и любопытные детали стандарта. Формат «одна заметка — один вопрос», удобно читать и находить через поиск.
const и volatile: семантика, const-корректность
Введение Завершаем второй блок цикла спецификаторами const и volatile — const уже неоднократно встречался в предыдущих статьях цикла про константные ссылки) без подробного разбора, и в этой статье…
Заголовочные файлы и include guards/pragma once, проблема множественного включения
Введение Мы рассматривали include guard вкратце — в этой статье разберём подробно, почему он необходим, как именно проблема множественного включения проявляется без него, и сравним классический подход (#ifndef/#define/#endif)…
Шаблоны функций: основы обобщённого программирования
Введение До этого момента каждая функция в примерах цикла была написана для конкретного, фиксированного типа параметров — шаблоны позволяют написать одну функцию, работающую с произвольным типом, определяемым компилятором…
Реализация State Machine (конечного автомата) через QStateMachine
Введение Многие части интерфейса и бизнес-логики приложения естественно описываются как конечные автоматы: состояние подключения (отключён/подключается/подключён/ошибка), состояние формы (редактирование/сохранение/сохранено), плеер (воспроизведение/пауза/остановлен). Реализация такой логики через разрозненные булевы флаги и…
Готовый класс для работы с конфигурацией приложения (обертка над QSettings)
Введение QSettings предоставляет кросс-платформенный доступ к настройкам приложения (реестр Windows, .ini-файлы, plist на macOS), но прямое использование QSettings с обращением по строковым ключам по всему коду — источник…
Реализация Event Bus / шины событий на сигналах Qt для слабосвязанных модулей
Введение В крупных приложениях с множеством модулей прямая связь между ними через сигналы/слоты (где каждый модуль явно знает о существовании и интерфейсе другого) постепенно создаёт плотный граф зависимостей,…
Inline-переменные и одноопределимое правило (ODR) в современном C++
Введение One Definition Rule (ODR, «правило одного определения») — одно из фундаментальных, но часто неочевидных правил C++: любая сущность (функция, переменная, класс, шаблон) должна иметь ровно одно определение…
Правило пяти (Rule of Five) в C++: конструкторы копирования/перемещения на практике
Введение «Правило пяти» (Rule of Five) — современная версия классического «правила трёх» (Rule of Three) из C++98, расширенная в C++11 семантикой перемещения. Если ваш класс самостоятельно управляет каким-либо…