为什么我不应该#include <bits/stdc .h>?

新手上路,请多包涵

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

 #include <bits/stdc++.h>

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

为什么?

原文由 Lightness Races in Orbit 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 727
2 个回答

包括 <bits/stdc++.h> 似乎在 Stack Overflow 上越来越常见,也许是本学年国家课程中新添加的内容。

我想这些优势是这样模糊地给出的:

  • 你只需要写一个 #include 行。
  • 您无需查找所有内容都在哪个标准标题中。

不幸的是,这是一个懒惰的 hack,直接命名 GCC 内部标头而不是单独的标准标头,例如 <string><iostream><vector> 。它破坏了便携性并养成了糟糕的习惯。

缺点包括:

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

不要这样做!


更多信息:

Quora为什么不好的例子:

原文由 Lightness Races in Orbit 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您的老师是 ICPC 老师,那么他/她是对的,但如果您的老师是软件工程老师,那么他/她可能不是。两者各有利弊:

  1. 使用它可以节省编码时间,但会增加编译时间。
  2. 由于它包含许多命名空间,您可能会偶然遇到难以调试的问题。

原文由 Masruka Jannat 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题