阅读“ A C ++之旅”时,我到达了“模块”,应该使用它们而不是包含标头。
一个模块只能编译一次(而不是在使用该模块的每个翻译单元中)
如果您#include header.h 101次,则header.h的文本将被编译器处理101次
也许我是一个误会,但让我们看一个简单的例子
def ss_r(s):
# Base case
if not s:
return [set()]
# Recursive
e = s.pop()
ssl = ss_r(s)
for i in range(len(ssl)):
ssl.append(ssl[i].union({e}))
return ssl
header.h的文本是否由编译器复制到每个src文件中?然后每个源产生一个目标文件,然后将其链接到.exe
它如何与模块一起使用?它是否动态链接到程序,因此仅存在一个副本并进行处理?
答案 0 :(得分:3)
差异是巨大的,因为使用当前方法,所有问题都是通过复制粘贴方法来解决整个问题。
将包含内容逐字复制到其他文件中,然后一起进行处理。在每个翻译单元中,相同的代码会根据需要进行多次处理。
模块将要发生的事情是,您将有一个特定的import指令,该指令将映射到一个模块,该模块已经公开了一个精确的API,并具有一个链接到最终可执行文件的特定二进制文件。
您不需要公开该API的头文件,因为将对源进行分析,并且将自动生成一个“接口文件”,其中枚举了所有导出的符号,可供该模块的进口商使用。
请注意,这只是通用方法,因为精确的定义尚待标准化。