Короткие заметки о языке C и C++: тонкости синтаксиса, поведение компилятора, подводные камни и любопытные детали стандарта. Формат «одна заметка — один вопрос», удобно читать и находить через поиск.
Концепты (concepts) в C++20: ограничение шаблонных параметров
Введение Одна из главных болей шаблонного программирования в C++ — нечитаемые сообщения об ошибках, когда шаблон используется с неподходящим типом. До C++20 единственным способом ограничить допустимые типы и…
Шаблоны (templates) в C++ для начинающих: от функции до класса
Введение Шаблоны — это механизм обобщённого программирования в C++, позволяющий писать код, работающий с разными типами без дублирования. Вместо того чтобы писать отдельную функцию maxInt, maxDouble, maxString, можно…
Обработка ошибок в C++: исключения vs коды возврата vs std::expected
Введение Вопрос «как обрабатывать ошибки в C++» не имеет единственно верного ответа — в языке исторически сосуществуют три подхода: исключения (exceptions), коды возврата (error codes) и появившийся в…
Умные указатели в Qt-коде: когда QSharedPointer, а когда std::shared_ptr
Введение В проектах на Qt разработчик неизбежно сталкивается с выбором: использовать собственные умные указатели Qt (QSharedPointer, QScopedPointer, QPointer) или указатели стандартной библиотеки (std::shared_ptr, std::unique_ptr, std::weak_ptr). Исторически Qt появился…
constexpr и compile-time вычисления в современном C++
Введение Современный C++ позволяет переносить часть вычислений с этапа выполнения программы на этап компиляции. Это не просто оптимизация скорости — это способ обнаруживать ошибки раньше, генерировать таблицы и…
RAII в C++: как избежать утечек ресурсов без сборщика мусора
Введение C++ не имеет сборщика мусора, и многие новички видят в этом источник опасности: «как же я не забуду освободить память или закрыть файл?». Ответ языка на этот…
QProcess: запуск внешних программ и обмен данными через stdin/stdout
Введение Многие приложения должны взаимодействовать с внешними программами: запускать утилиты командной строки, конвертеры, компиляторы, скрипты. В Qt для этого есть класс QProcess, который запускает внешний процесс и предоставляет…
Потокобезопасные структуры данных в Qt-приложениях: паттерны и ошибки
Введение При переходе от однопоточного кода к многопоточному самая частая ошибка — продолжать использовать обычные контейнеры (QVector, QList, QMap, std::vector) из нескольких потоков без какой-либо синхронизации, считая их…