Синтаксис C и C++ по полочкам: указатели, ссылки, память, типы, шаблоны и современные возможности стандарта. Системный разбор основ языка с примерами — полезно и новичкам, и тем, кто хочет закрыть пробелы.
Препроцессор: #define, макросы, условная компиляция
Введение Ранее мы использовали #ifndef/#define/#endif для include guard без подробного объяснения — в этой статье разберём препроцессор C/C++ системно: текстовые макросы через #define, условную компиляцию, и важные практические…
Умные указатели: unique_ptr, shared_ptr, weak_ptr
Введение Мы разбирали ручное управление динамической памятью через new/delete, систематически разберёт RAII как общую философию — умные указатели представляют практическое, готовое к использованию воплощение RAII конкретно для управления…
Move-семантика: rvalue-ссылки, std::move, move-конструкторы
Введение До этой статьи все примеры с копированием объектов (про конструктор копирования концептуально) предполагали полное, «глубокое» копирование данных — move-семантика (C++11) предоставляет альтернативу: эффективную «передачу» внутренних ресурсов объекта…
Лямбда-выражения: захват переменных, типы захвата
Введение Мы разобрали указатели на функции как способ передачи поведения как параметра — лямбда-выражения (C++11) дают значительно более гибкую, современную альтернативу, способную «захватывать» переменные из окружающего контекста, чего…
auto и decltype: вывод типов в современном C++
Введение Все предыдущие примеры явно указывали тип каждой переменной — современный C++ (начиная с C++11) предоставляет auto для автоматического вывода типа переменной из её инициализатора, и decltype для…
Специализация шаблонов: полная и частичная
Введение Ранее мы рассматривали единый, обобщённый шаблон, одинаково обрабатывающий любой тип — иногда нужна особая, отличающаяся реализация для конкретного типа (или ограниченного семейства типов) — специализация шаблонов решает…
Шаблоны классов: контейнеры и обобщённые структуры
Введение Ранее разбирали шаблоны функций — шаблоны классов применяют ту же идею обобщённого программирования к целым классам, что и лежит в основе всех стандартных контейнеров библиотеки (std::vector<T>, std::map<K,…
Шаблоны функций: основы обобщённого программирования
Введение До этого момента каждая функция в примерах цикла была написана для конкретного, фиксированного типа параметров — шаблоны позволяют написать одну функцию, работающую с произвольным типом, определяемым компилятором…