#include <bits / stdc ++。h>如何在C ++中工作?

我从Codeforces博客上读到,如果我们在C++程序中包含#include <bits/stdc++.h> ,那么就不需要包含任何其他头文件。 #include <bits/stdc++.h>是如何工作的,可以使用它而不是包含单独的头文件吗?

它基本上是一个头文件,也包括每个标准库和STL包含文件。 我能看到的唯一目的就是testing和教育。

例如GCC 4.8.0 /bits/stdc++.h源文件 。

使用它将包括许多不必要的东西,并增加编译时间。

编辑:正如尼尔所说,这是一个预编译头的实现。 如果您正确设置了预编译,实际上可以根据您的项目加快编译时间。 ( https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html

不过,我会build议你花点时间学习每个sl / stl头文件,并将其单独包含进来,而不是使用“superheaders”,除了预编译的目的。

#include <bits/stdc++.h>是预编译头的实现文件。

从软件工程angular度来看,最小化包含是个好主意。 如果你使用它,实际上包含了很多你的程序可能不需要的文件,从而不必要地增加了编译时间和程序大小。

但是在比赛中,使用这个文件是一个好主意,当你想减less做家务时所浪费的时间; 特别是当你的排名是时间敏感的。

它适用于大多数在线评委,编程比赛环境,包括ACM-ICPC(次区域,地区和世界总决赛)以及许多在线评委。

它的缺点是它

  • 增加编译时间。
  • 使用GNU C ++库的内部非标准头文件,所以不能在MSVC,XCode和其他许多编译器中编译

该头文件不是C ++标准的一部分,因此是不可移植的,应该避免。

而且,即使标准中有一些catch-all标题,你也要避免使用它来代替特定的头文件,因为编译器每次都要真正地读入和parsing每个包含的头文件(包括recursion包含的头文件)翻译单位编译。