C++标准库提供有关的iostream以下标题:什么时候应该`#include <ios>`,`#包括<iomanip>`等?
<ios>
<iosfwd>
<istream>
<ostream>
<streambuf>
<iostream>
<fstream>
<sstream>
<strstream> [deprecated]
<iomanip>
是什么时候#include
这些标题的最简单,最合理的规则? (如果答案在不同版本的C++中有所不同,我最感兴趣的是C++ 17,而且我最感兴趣的是保证能够工作,而不是哪些头文件在libstdC++中包含其他头文件, 。)
我愿意相信,我可以随时<iostream>
,<fstream>
(只有当我用fstreams)度日,和/或<sstream>
(仅当我使用stringstreams)。这似乎工作简单的程序,如
#include <iostream>
int main() {
std::cout << std::hex << 42 << std::endl << std::flush;
}
但是如果我添加std::setw(42)
该程序,然后停止编译;在这种情况下,我还需要包含<iomanip>
。
这样,规则似乎是“包括<iostream>
,<fstream>
,和/或<sstream>
;此外包括<iomanip>
如果你使用任何these操纵。”
如果我按照这个规则宗教,我将永远运行到哪里需要包括的情况下<ios>
,<iosfwd>
,<istream>
,<ostream>
,和/或<streambuf>
在我的应用程序代码?
不太确定我明白这个问题。有一个非常清晰的每个头文件提供了什么东西的列表,然后包含一些头文件,为每个使用的头文件提供foo,就像使用任何头文件一样。 IO头没有特殊之处。 –
我也不确定我是否完全遵循。只有在包含时才使用你所需要的。如果需要,您应该包括它,如果它没有被使用,请将其删除。你不能使用Foo,如果你没有#include对不对? –
当你需要它们时。如果编译器说它缺少IOS中的东西的定义,请包括IOS。 – user4581301