模块的优势在于它们是一项标准功能。所有C++20编译器必须按照语言描述来实现它们。预编译头文件不是一个标准功能。并非所有编译器都一定拥有该功能,而且每个具备该功能的编译器都会以自己的方式实施,这种方式未必与其他编译器兼容。模块相对于头文件的优点在于它们封装了宏定义。头文件的一个(很少用到的)优点是它们可以“导出”宏定义。模块相对于头文件的另一个优点是你可以明确控制需要导出的名称,这样就可以封装实现细节。截至撰写本文时,模块的一个缺点是只有MSVC目前完全实现了它们。