Hardc++20modules
Что такое modules в C++20 и чем они заменяют #include?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Modules (C++20) — новая система организации кода, альтернатива заголовочным файлам. Объявление export module mylib;, импорт import mylib;.
// mylib.cppm (модуль)
export module mylib;
export int add(int a, int b) { return a + b; }
int helper() { return 0; } // не экспортируется — скрыто
// main.cpp
import mylib;
int main() { return add(1, 2); }Преимущества:
- Нет препроцессорного копирования текста — модуль компилируется один раз, AST сохраняется;
- Быстрее компиляция больших проектов (в разы);
- Макросы не утекают между модулями;
- Лучшая инкапсуляция.
Ограничения: tooling и build-systems (CMake, Bazel) только внедряют поддержку; coexist с #include через global module fragment. Медленно внедряется, но обещает ускорить сборку.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.