Заметки по С++

Короткие заметки о языке C и C++: тонкости синтаксиса, поведение компилятора, подводные камни и любопытные детали стандарта. Формат «одна заметка — один вопрос», удобно читать и находить через поиск.

Заметки по языку с и с++

Реализация 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 семантикой перемещения. Если ваш класс самостоятельно управляет каким-либо…

Заметки по языку с и с++

Концепты (concepts) в C++20: ограничение шаблонных параметров

Введение Одна из главных болей шаблонного программирования в C++ — нечитаемые сообщения об ошибках, когда шаблон используется с неподходящим типом. До C++20 единственным способом ограничить допустимые типы и…

Заметки по языку с и с++

Шаблоны (templates) в C++ для начинающих: от функции до класса

Введение Шаблоны — это механизм обобщённого программирования в C++, позволяющий писать код, работающий с разными типами без дублирования. Вместо того чтобы писать отдельную функцию maxInt, maxDouble, maxString, можно…

Заметки по языку с и с++

Обработка ошибок в C++: исключения vs коды возврата vs std::expected

Введение Вопрос «как обрабатывать ошибки в C++» не имеет единственно верного ответа — в языке исторически сосуществуют три подхода: исключения (exceptions), коды возврата (error codes) и появившийся в…