1

我特别想<iostream>这里。既然它是大多数 C++ 程序都使用的通用库,为什么不默认包含它?其他示例是<string>和。<fstream><cstdlib>

4

4 回答 4

6

常见的 C++ 习语:

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

于 2013-04-08T09:40:29.450 回答
3

那是因为没有“很多时候”使用的通用标题。

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

相同的推理模式适用于任何其他“经常使用”的标题。但是,如果在您的项目中有很多地方使用的头文件,您可能想要查找预编译的头文件。但是您可能还希望使您的应用程序模块化,而不是在每个地方都使用 API 标头。

于 2013-04-08T09:44:16.890 回答
2

具有讽刺意味的是,您选择<iostream>了一个例子:

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

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

于 2013-04-08T09:48:43.210 回答
1

由于性能/可执行文件大小,这些东西不包括在内。通过为您提供您可能需要的最低限度的东西,您的可执行文件将具有可能的最小大小,并且您将不会链接到您根本不使用的库。

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

于 2013-04-08T09:46:40.743 回答