C++ 预编译头文件 vs. 模块

4
我对预编译头文件和模块的区别感到困惑。它们之间有何优势? 我已经阅读了 Microsoft 对它们的文档,但并没有帮助我太多。

PH是在模块还没有(更确切地说是“很遗憾仍然没有”)出现的时代创建的黑客。 - ixSci
2
一个是非标准的,但被大多数编译器实现了;另一个是标准的,但编译器尚未(完全)实现 :-( - Jarod42
1个回答

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

3
此外,请注意大多数编译器只允许每个文件包含一个单一的预编译头文件。相比之下,您可以导入多个模块。 - Nicol Bolas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接