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 подскажет развёрнутый ответ в реальном времени.