Выбор ответа Middle Современный C++20/23 обновлено

Зачем модули

Вопрос

Главное преимущество модулей C++20 перед #include:

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Интерфейс компилируется один раз, макросы и детали наружу не протекают. include вставляет текст заголовка в каждую единицу трансляции заново: огромные объёмы повторного разбора и утечка макросов.

Варианты ответа

  1. Модули позволяют не писать объявления функций до их использования
  2. Модули отменяют линковку: код подставляется прямо при импорте
  3. Интерфейс компилируется один раз, макросы и детали наружу не протекаютправильный ответ
  4. Модули работают только с header-only библиотеками без .cpp файлов

Разбор

#include вставляет текст заголовка в каждую единицу трансляции заново: огромные объёмы повторного разбора и утечка макросов. Модуль компилируется в бинарный интерфейс (BMI) один раз, import подключает его быстро, а наружу видно только то, что помечено export.

  • Объявления по-прежнему нужны, просто они в интерфейсе модуля.
  • Линковка остаётся.
  • Модули не ограничены header-only.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.