因此,我注意到我所做的大多数代码都具有i#include <iostream>
。这让我感到奇怪。为什么C ++无法自动包含iostream
?是的,我知道您无需使用iostream
即可进行编码,但是在基本编码应用程序方面,我将节省大量时间。
但是,是的,它将占用内存存储空间,但是我的问题是……...头?每个单独的存储器都至关重要吗?它有多重要?
答案 0 :(得分:6)
所以我注意到我们用C ++编写的所有代码有一个共同点,即头文件iostream
那是不正确的。
我的大多数文件都不包含<iostream>
。如果大多数人都这样做,则可能是您的程序没有特别好的架构来分离问题。我的大部分程序将执行计算,移动数据,管理某些GUI,与数据库对话或连接到网络。这些都不涉及IOStreams库。
如果您只是在文件全部的顶部编写#include <iostream>
,则无论文件是否需要IOStreams功能,您都应该停止这样做。
我只是想知道,为什么那里的编译器不能只将iostream包含在系统中?
他们可以。他们不想。
这样做将使我们不必每次都键入
#include <iostream>
。
您必须明确要求一些东西是好。如果我不使用IOStreams库,我不希望编译器浪费时间,包括构建和交付IOStreams库的部分。
如果我错了,实际上有一种不用头文件进行编码的方法(但我认为没有)
如果要在某个翻译单元中使用IOStream,则需要#include <iostream>
(或该库中的其他一些相关头文件)。
如果您不想在某个翻译单元中使用IOStream,请不要#include <iostream>
。就这么简单。
答案 1 :(得分:3)
因为许多程序不需要它。
看看仅包含iostream
(启用了优化功能)的overhead并询问是否不需要它:
_GLOBAL__sub_I_main:
sub rsp, 8
mov edi, OFFSET FLAT:_ZStL8__ioinit
call std::ios_base::Init::Init() [complete object constructor]
mov edx, OFFSET FLAT:__dso_handle
mov esi, OFFSET FLAT:_ZStL8__ioinit
mov edi, OFFSET FLAT:_ZNSt8ios_base4InitD1Ev
add rsp, 8
jmp __cxa_atexit
正如@Frank和@Justin指出的那样,原始开销为std::ios_base::Init::Init()