C++ — чек-лист
Перед вопросами ниже полезно выполнить мини-проекты из Практических заданий — они закрывают типичные пробелы между теорией и кодом.
Чек-лист самопроверки
- Что такое C++ и чем он отличается от C?
- Какие парадигмы программирования поддерживает C++?
- Что означает принцип "нулевой стоимости абстракций"?
- Как происходит компиляция и линковка C++-программы?
- Что такое препроцессор и какие директивы он поддерживает?
- Что такое заголовочные файлы и зачем нужны include guards или
#pragma once? - Какие есть фундаментальные типы данных в C++?
- В чём разница между
int,long,size_t,ptrdiff_t? - Что такое
constи как он применяется к переменным, указателям, функциям? - Что такое ссылки и указатели — и чем они отличаются?
- Как работает приведение типов в C++ (
static_cast,dynamic_cast,const_cast,reinterpret_cast)? - Что такое область видимости и продолжительность жизни переменной?
- Что такое автоматические, статические и динамические переменные?
- Как работают условные операторы (
if,switch)? - Какие циклы поддерживаются (
for,while,do-while, range-based for`)? - Что такое функции и как передаются аргументы (по значению, по ссылке, по указателю)?
- Что такое перегрузка функций?
- Что такое inline-функции и зачем они нужны?
- Что такое пространства имён и как их использовать?
- Что такое класс и чем он отличается от структуры?
- Какие спецификаторы доступа существуют (
public,private,protected)? - Что такое конструктор, деструктор, конструктор копирования, оператор присваивания?
- Что такое правило трёх (Rule of Three) и правило пяти (Rule of Five)?
- Что такое move semantics и rvalue-ссылки?
- Что такое
std::moveи когда его применять? - Что такое RAII и как он реализуется?
- Что такое умные указатели (
unique_ptr,shared_ptr,weak_ptr)? - Что такое наследование и как оно работает в C++?
- Что такое виртуальные функции и полиморфизм?
- Что такое чисто виртуальные функции и абстрактные классы?
- Почему множественное наследование в C++ считается сложным?
- Что такое шаблоны и как они обеспечивают обобщённое программирование?
- В чём разница между шаблонами функций и шаблонами классов?
- Что такое SFINAE и как оно использовалось до C++20?
- Что такое концепты (concepts) и как они упрощают шаблоны?
- Что такое лямбда-выражения и как они захватывают переменные?
- Что такое стандартная библиотека (STL) и из чего она состоит?
- Какие основные контейнеры есть (
vector,list,map,unordered_map,set,array)? - В чём разница между последовательными и ассоциативными контейнерами?
- Что такое итераторы и какие категории итераторов существуют?
- Как работают алгоритмы из
<algorithm>(sort,find,transform,accumulate)? - Что такое исключения и как их обрабатывать (
try/catch/throw)? См. Обработка исключений в C++ и Иерархия исключений в стандартной библиотеке C++. - Что такое noexcept и зачем он нужен?
- Как работает многопоточность в C++ (
std::thread,std::mutex,std::async)? - Что такое futures и promises?
- Что такое атомарные операции и
std::atomic? - Что такое модули в C++20 и как они заменяют заголовочные файлы?
- Что такое корутины и как они работают в C++20?
- Что такое диапазоны (ranges) и как они упрощают работу с коллекциями?
- Какие современные практики рекомендуются в C++20/C++23 (например, использование
std::format,std::span,char8_t)? - Когда предпочитать композицию наследованию? См. Композиция и наследование в C++.
- Что такое
thisи статические члены класса? См. Класс в C++ — this, static, friend и вложенные типы. - Что такое RTTI,
typeidиdynamic_cast? См. RTTI в C++ — typeid и dynamic_cast.