この記事は https://en.cppreference.com/w/cpp/language/modules.html についての個人的なメモです。詳細な情報は原典を当たることをおすすめします。
元の記事で明示的に宣言されていない用語はハイライトしています。
モジュール (modules)
翻訳単位 (translation unit)
C++コンパイラはソースファイルを翻訳する際それを 翻訳単位 に変換します。翻訳単位はモジュールが提供する モジュール単位 (module unit) とヘッダから合成される ヘッダ単位 が存在します。モジュール単位はさらに モジュールインタフェース単位 と モジュール実装単位 大別されます。
モジュール宣言 (module declaration)
モジュールインタフェース単位 (module interface unit)
以下モジュールインタフェース単位の宣言を明示する場合これをモジュールインタフェース宣言と呼称します。
モジュールインタフェース宣言は次の構文を用いて行います。
export module <module-name> // モジュールインタフェース宣言
モジュールインタフェース単位内では後述する インポート宣言 を行うことができます。
モジュール実装単位 (module implementation unit
以下モジュール実装単位の宣言を明示する場合これをモジュール実装宣言と呼称します。
モジュール実装宣言は以下の構文を用いて行います。
module <module-name> // モジュール実装宣言
モジュール実装単位内では後述する エクスポート宣言 を行うことができます。
ヘッダ単位 (header unit)
エクスポート宣言 (export declaration)
モジュール実装単位内 のすべての宣言や定義は エクスポート宣言 によって外部に公開することができます。公開された宣言や定義は後述する インポート宣言 によって他の翻訳単位から利用可能になります。
エクスポート宣言は次の構文を用いて行います。
export <declaration-or-definition> // エクスポート宣言
複数の宣言や定義をブロックで囲んでエクスポートすることもできます。
export { <declaration-or-definition-sequence> } // ブロック文のエクスポート宣言
インポート宣言 (import declaration)
モジュールインタフェース単位内 ではエクスポート宣言によって公開された宣言や定義を インポート宣言 によってその翻訳単位内で利用可能になります。インポート宣言はさらにモジュールインポート宣言とヘッダインポート宣言に大別されます。 すべてのインポート宣言はモジュール宣言の後かつ他のすべての宣言の前で行われなければなりません 。
モジュールインポート宣言
モジュール実装単位はモジュールインポート宣言によってインポートできます。
モジュールインポート宣言は次の構文を用いて行います。
import <module-name> // モジュールインポート宣言
モジュールインポート宣言をエクスポート宣言することもできます。これによりモジュールのインポート元にインポートを強制することができます。
モジュールインポート宣言のエクスポート宣言は次の構文を用いて行います。
export import <module-name>
ヘッダインポート宣言
ヘッダ単位はヘッダインポート宣言によってインポートできます。
ヘッダインポート宣言をエクスポート宣言することもできます。これによりモジュールのインポート元にインポートを強制することができます。
ヘッダインポート宣言のエクスポート宣言は次の構文を用いて行います。
export import <header-name>
参考文献