std::string
例如,如果我只想使用,那么导入(理论上的)std::string
模块不是比导入整个标准库更有效吗?
是否为了易于使用,因为您必须自己构建标准库模块,并且将所需的每个单独的组件构建到模块中会很繁琐?
或者是由于创建模块(任何大小)的某种开销,如果导入足够多的小模块,它最终会比导入一个大模块更昂贵?
10
最佳答案
2
例如,如果我只想使用 std::string,那么导入(理论上的) std::string 模块的性能不是比导入整个标准库更高吗?
模块的工作方式并非如此。模块导入不同于头文件包含。模块导入的成本与模块中的内容数量不成比例。
导入模块意味着编译器会读取一些二进制数据,说明哪些名称可用。但模块的整个编译代码不需要仅从导入中读取。当您使用模块导出名称的实体时,编译器可以跳转到编译模块文件的该部分以找出其中的内容。
3
-
有没有关于这种特殊行为的参考?
– -
1@PasserBy:标准中的引用?标准规定了可见的行为,而不是性能。所以这超出了标准的范围。但是,在将所有内容放入单个模块的提案中提到了模块导入的实现方式,并且他们在几种实现上进行了测试,没有明显的性能损失。
– -
我知道标准中不会有任何内容,我指的是诸如提案之类的内容,或者可能是编译器作者的演讲。我之所以问这个问题,是因为你会认为这是人们需要了解的一个主要功能。
–
|
根据新标准,你只需要导入 std。但这并不意味着整个 STL 都会添加到你的二进制文件中。你的编译器应该对其进行优化,并“切断”所有无用的链接。
|
–
–
–
#include
自 C++98 以来(之前),C++ 标准库 via 就允许包含子集。模块是一个相对较新的功能,允许导入标准库的子集是一项正在进行的工作。添加/修改/删除标准部分的标准化过程并非一蹴而就 – 有一个强制性的过程 – 从提案开始,审议和发展该提案,纳入标准草案,并最终获得批准。–
import
。我的比较是在import std;
和假设之间进行的import std.string;
。–
|