为什么更常见的#include指令不包含在默认值中?

时间:2013-04-08 09:33:31

标签: c++ include

我在这里特别想到<iostream>。由于它是大多数C ++程序使用的常见库,为什么不包含默认值?其他示例包括<string><fstream><cstdlib>

4 个答案:

答案 0 :(得分:6)

Common C ++习语:

  

您只需为使用的内容付费。

答案 1 :(得分:3)

这是因为没有“很多时候”使用的公共标题。

E.g。 <iostream>仅用于通过流/控制台执行大量I / O的应用程序,并且仅当这些应用程序不使用其他库来执行任务时(控制台会考虑ncurses)。在这些应用程序中,它仅用于实际执行 I / O的模块,而不是用于其他模块中。做逻辑,计算,持久性到数据库等。

相同的推理模式适用于任何其他“常用”标题。但是,您可能希望查找预编译的标头,如果在您的项目中有许多地方使用的标头。但您可能希望将应用程序模块化,并且在每个地方使用API​​标头。

答案 2 :(得分:2)

具有讽刺意味的是,您选择<iostream>为例:

C ++标准库第二版,第752页

  

仅当要使用标准流对象时,才应包含标头<iostream>。对于一些实现,一些代码在启动时针对包括该头部的每个翻译单元执行。正在执行的代码并不昂贵,但它需要加载可执行文件的相应页面,这可能很昂贵。

答案 3 :(得分:1)

由于性能/可执行文件大小,因此不包含此内容。通过向您提供您可能需要的最基本的东西,您的可执行文件将具有可能的最小尺寸,并且您将不会链接到您根本不使用的库。

包含您不使用的库可能会在某些情况下增加程序的加载时间。(这在很大程度上取决于您的系统加载策略!)。 一旦加载程序的性能,应该没有太大的区别(如果有的话!)。