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