我在这里特别想到<iostream>
。由于它是大多数C ++程序使用的常见库,为什么不包含默认值?其他示例包括<string>
,<fstream>
和<cstdlib>
。
答案 0 :(得分:6)
Common C ++习语:
您只需为使用的内容付费。
答案 1 :(得分:3)
这是因为没有“很多时候”使用的公共标题。
E.g。 <iostream>
仅用于通过流/控制台执行大量I / O的应用程序,并且仅当这些应用程序不使用其他库来执行任务时(控制台会考虑ncurses)。在这些应用程序中,它仅用于实际执行 I / O的模块,而不是用于其他模块中。做逻辑,计算,持久性到数据库等。
相同的推理模式适用于任何其他“常用”标题。但是,您可能希望查找预编译的标头,如果在您的项目中有许多地方使用的标头。但您可能希望将应用程序模块化,并且不在每个地方使用API标头。
答案 2 :(得分:2)
具有讽刺意味的是,您选择<iostream>
为例:
C ++标准库第二版,第752页
仅当要使用标准流对象时,才应包含标头
<iostream>
。对于一些实现,一些代码在启动时针对包括该头部的每个翻译单元执行。正在执行的代码并不昂贵,但它需要加载可执行文件的相应页面,这可能很昂贵。
答案 3 :(得分:1)
由于性能/可执行文件大小,因此不包含此内容。通过向您提供您可能需要的最基本的东西,您的可执行文件将具有可能的最小尺寸,并且您将不会链接到您根本不使用的库。
包含您不使用的库可能会在某些情况下增加程序的加载时间。(这在很大程度上取决于您的系统加载策略!)。 一旦加载程序的性能,应该没有太大的区别(如果有的话!)。