C++ 模块会使模板编译更快吗?
模块会使模板编译更快吗?模板(通常)只能是标题,并且最终位于#includer的翻译单元中C++ 模块会使模板编译更快吗?,c++,c++11,C++,C++11,模块会使模板编译更快吗?模板(通常)只能是标题,并且最终位于#includer的翻译单元中 相关:预编译头是否会加快模板编译速度?根据模块提案,从您引用的论文来看,这是添加模块的三个主要目标中的第一个: 1简介 模块是一种封装库并封装其实现的机制。 它们不同于传统的翻译单位和标题的方法,主要是 所有实体仅在一个地方定义(即使是类、模板等)。本报 提出了一种模块机制(有点类似于模块a-2),具有三个 主要目标: 显著提高大型项目的构建时间 在接口和实现之间实现更好的分离 为现有库提供可行的过渡路
相关:预编译头是否会加快模板编译速度?根据模块提案,从您引用的论文来看,这是添加模块的三个主要目标中的第一个: 1简介 模块是一种封装库并封装其实现的机制。 它们不同于传统的翻译单位和标题的方法,主要是 所有实体仅在一个地方定义(即使是类、模板等)。本报 提出了一种模块机制(有点类似于模块a-2),具有三个 主要目标:
- 显著提高大型项目的构建时间
- 在接口和实现之间实现更好的分离
- 为现有库提供可行的过渡路径 虽然这些是驱动目标,但该方案也解决了许多其他长期存在的实用C++问题(初始化排序、运行时性能等)。
总之,如果没有其他原因,模板定义本身只需解析一次,那么模块可以而且肯定会使模板编译更快。它们可能会带来其他好处,这些好处在没有模块的情况下是不可能实现的,或者更难实现,但这可能无法保证。我不知道模块,但我知道gcc甚至现在提供了预编译头,就像许多其他编译器一样。预编译头可以包含非常有效的机器可读版本的模板描述,因此当包含头时,可以跳过许多编译步骤,这通常是仅源文本未编译头所需的 本文讨论的模块是预编译接口文件,因此我假设当前的预编译头和新的预编译接口文件将提供类似的性能。从纯文本可移植模块描述创建这样的文件可能会更有效,因为由于语言语法的限制,它可以节省时间。而且它将更加标准化,因此更多的头文件将受益于预编译。当前项目很少预编译多个头,而根据我的经验,跨项目预编译头更为罕见 预编译头是否会加快模板编译速度 没有;它使模板无法编译。这就是PCH和模块的全部要点:停止编译所有内容
的思想是将“加载C++文本和编译”转换为“加载C++符号”。
现在,您仍然需要实例化模板(除非它们是在PCH/模块中实例化的)。但是,C++模板代码的编译成本被删除了。 C++中的模块是什么?我认为我不是唯一一个认为它不会提高模板构建时间的人。它说实体(包括模板)是在一个地方定义的,模块将显著缩短构建时间。除此之外,我没有从中推断出其他任何东西。我应该问他们如何改进模板构建时间。好吧,你可以阅读文档的其余部分。我将编辑我的答案以添加一个示例报价。我不确定是否遵循,但可以从模块、wi导出模板类