Теория
- Можем ли мы импортировать выбранные имена?
- Получится ли переназвать имена при импорте, как в Python?
- Структурируют ли модули имена?
- Импортируются только нужные имена?
- Ускоряют ли модули процесс сборки?
- Модули не влияют друга на друга?
- Не пишем больше отдельно .cpp и .h?
- Не можем испортить код других модулей макросами при импорте?
- Принцип независимости сборки. До этого программа на C++ состояла из разных единиц трансляции — файлов .cpp. Каждый из них можно было компилировать отдельно: сегодня один, завтра другой, через неделю третий, а потом уже слинковать всё вместе. Теперь порядок не произвольный. Файл нельзя собрать, пока не предкомпилированы модули, от которых он зависит. Поэтому собрать модуль не получится, если в каком-то зависимом модуле ошибка. Процесс сборки сильно усложняется.
- Принцип гомогенности кода. Хотя обычно пишут в начале, это договорённость, а не правило. Его можно писать в любом месте программы. И так — со всем, что есть в C++: никакой глобальной структуры у кода до C++20 не было. Синтаксические конструкции могли идти в любом порядке. Новым Стандартом вводится преамбула. И только в ней могут располагаться импорты модулей. Как только преамбула закончилась, писать стало нельзя. У файла кода появляется структура. Кроме того, перед преамбулой возможна предпреамбула — так называемый Global module fragment. В нём могут располагаться только директивы препроцессора. Но они допускают , а значит, по факту — всё что угодно. Подробно разбирать Global module fragment не будем.
module unit header unit
- Module interface unit. Начинается с .
- Module implementation unit. Начинается с .
можно импортироватьможет экспортировать