C++幕后的模块

C++ modules behind the scenes

本文关键字:模块 C++      更新时间:2023-10-16

阅读"C++之旅" 我到达了"模块",应该使用它们而不是包含标题。

  1. 一个模块只编译一次(而不是在每个使用它的翻译单元中编译)

  2. 如果 #include header.h 101 次,则编译器将处理 header.h 的文本 101 次

也许我误解了,但让我们通过一个简单的例子

      src1.cpp includes header.h
      src2.cpp includes header.h

header.h 的文本被编译器复制到每个 src 文件中?然后每个源生成一个对象文件,然后将其链接到.exe

它如何与模块一起工作?它是否动态链接到程序,因此只有一个副本存在并处理?

差异很大,因为使用当前方法,一切都是通过复制和粘贴方法完成的。

包含被逐字复制到其他文件中,然后完全处理。每个翻译单元根据需要多次处理相同的代码。

模块将要发生的事情是,您将有一个特定的导入指令,该指令将映射到一个已经公开精确 API 并具有链接到最终可执行文件的特定二进制文件的模块。

您不需要公开该 API 的头文件,因为将分析源代码并自动生成一个"接口文件",该文件枚举该模块的导入者可用的所有导出符号。

请注意,这只是一些通用方法,因为精确的定义尚未标准化。