使用普通 header 文件导入

usage of import with plain header files

摆脱 #include 并且只使用 import 关键字而不是 headers(例如 <span>"Foo.h")是否是一种好习惯?这有什么好处吗?任何可能的缺点?它会增加构建时间吗?

cppreference 有一个这样的例子:

import <set>; // imports a synthesized header unit formed from header

在这种情况下,synthesized 到底是什么意思?

Are there any benefits to this?

导入合成的 header 单元而不是包含 header 可能会满足想要对两个模块和 header 都使用一种指令类型的风格指南。

Any possible downsides?

它不会在 pre-C++20 代码中工作,也不会在尚未实现导入 header 文件的编译器中工作。如果您还使用模块,这无关紧要,因为它们也不起作用 pre-C++20。

此功能的目的是编译header(包括,例如,预处理和解析,但不是所有模板实例化)一次,而不是每次翻译一次使用它的单位。它只有在你的 header 文件“表现良好”的情况下才有效,因为它们包含了他们需要的一切(这不是 普遍 接受的好主意)并且不取决于 包含顺序或外部宏定义。它往往会使第一个导入翻译单元的构建速度稍慢,但会使任何 后续 导入器的构建速度显着加快。

“综合”是指编译器将 header 文件视为一个 source 文件,它被指示单独编译而不是仅仅编译作为翻译单元的一部分。