为什么我不应该 #include ?
为什么我不应该 #include ?
我发布了一个带有代码的问题,其中唯一的 #include
指令是以下内容:
#include <bits/stdc++.h>
我的老师告诉我要这样做,但在评论区被告知我不应该这样做。
为什么呢?
为什么?因为它被用作C++标准头文件一样使用,但没有任何标准提到它。因此你的代码在构建时就是不可移植的。你在cppreference上找不到任何关于它的文档。因此它可能根本不存在,只是某个人的想象而已 :)\n\n我发现了一种令人震惊和不可思议的情况,就是有一个广为人知的教学网站,每个C++示例都似乎包含了这个头文件。这个世界疯了。这是证明。\n\n对于任何写这样“教程”的人,请停止使用这个头文件。忘掉它吧。不要传播这种疯狂的行为。如果你不愿意理解为什么这样做是错误的,请相信我的话。我不想被视为什么权威人士,我可能有一半的时间都是在胡说八道,但在这个问题上我将例外。我宣称我知道我在说什么。请相信我。我请求您。\n\n附言:我可以很好地想象那个可怕的“教学标准”是如何出现这个邪恶的想法的,以及导致这种情况的原因。仅仅因为看起来有实际需要并不意味着这是可接受的,即使回顾起来也是如此。\n\n此外,实际上并没有这样的实际需要。C++标准头文件并不多,而且它们都有很好的文档。如果你是一名教师,通过添加此类“魔法”来帮助你的学生,反而会对他们造成伤害。让学生产生魔法思维方式是我们最不想看到的。如果您需要为学生提供一个简化版的C++,可以为您所教授的课程准备一个短列表的头文件,并提供简明的文档,以便学生可以使用库构造。
在 Stack Overflow 上,包含
似乎越来越常见,可能是当前学年国家课程中新增的内容。我想,其优点大概就是:\n\n
- \n
- 只需要写一行
#include
。 - 不需要查找某个标准头文件中是否包含所需内容。
\n
\n
\n\n不幸的是,这是一种懒惰的方法,直接命名了 GCC 内部头文件,而不是像
、
和
那样单独命名每个标准头文件。这破坏了可移植性并培养了糟糕的习惯。其中的缺点包括:\n\n
- \n
- 它可能只在该编译器上工作。
- 您不知道当您使用它时它会做什么,因为其内容没有被标准设置。
- 甚至只是将编译器升级到其下一个版本可能会破坏您的程序。
- 每个标准头文件都必须与您的源代码解析和编译,这是缓慢的,对于某些编译设置会导致臃肿的可执行文件。
\n
\n
\n
\n
\n\n 不要这样做!\n\n更多信息:\n\n
\n\nQuora 为什么不好的例子:\n\n