我为什么不要#include <bits / stdc ++。h>?

我用我的代码发布了一个问题,只有#include指令如下:

 #include <bits/stdc++.h> 

我的老师告诉我这样做,但在评论部分,我被告知我不应该这样做。

为什么?

包括<bits/stdc++.h>在Stack Overflow上看起来越来越普遍,可能是本学年新增加到国家课程中的东西。

我想像这样的好处是模糊的:

  • 你只需要写一个#include
  • 你不需要查询所有的标准头文件

不幸的是,这是一个懒惰的黑客,直接命名GCC内部头文件而不是像<string><iostream><vector>这样的单个标准头文件。 它破坏了可移植性并培养了可怕的习惯。

缺点包括:

  • 它可能只适用于该编译器
  • 您不知道在使用它时会做什么,因为它的内容不是由标准设置的
  • 即使只是将你的编译器升级到自己的下一个版本也可能会破坏你的程序
  • 每一个标准头文件都必须和你的源代码一起parsing和编译,速度很慢,在某些编译设置下会导致庞大的可执行文件

不要这样做!


更多信息:

为什么Quora不好的例子:

“为什么”? 因为它使用就像它应该是一个C ++标准头,但没有标准提及它。 所以你的代码根据定义是不可移植的。 你不会在http://cppreference.com上find它的任何文档,所以它可能不存在&#x3002; 这是一个人的想象:)

正如在@Lightness Races in Orbit中提到的Quora问题的最佳答案中所解释的那样,在编程竞赛的环境中包含bits / stdc ++。h没有什么错误。 在可移植性,编译时间和标准化方面的缺点与此无关。 如果使用示例代码,则在大学编程课程中也是如此。

如果你正在写产品代码,那就不要使用它。 根据您正在编写的代码的目的,来回切换应该不是什么大问题。