C++ 预编译头文件与模块

c++ precompiled headers vs. modules

我对预编译头文件和模块之间的区别感到困惑。一个比另一个有什么优势? 我已经阅读了关于它们的 Microsoft 文档,但对我帮助不大。

模块的一个优点是它们是标准功能。所有 C++20 编译器都必须按照语言中的描述来实现它们。预编译 headers 不是标准功能。并非所有编译器都必须具有该功能,并且每个具有该功能的编译器都以自己的方式实现它们,不一定与其他编译器兼容。

模块优于 headers 的一个优点是它们封装了宏。 headers 的一个(很少有用的)优点是它们可以“导出”宏。

模块优于 headers 的一个优势是您可以明确控制导出的名称,这允许封装实现细节。

在撰写本文时,模块的一个缺点是到目前为止只有 MSVC 完全实现了它们。