C++ 为什么不包括<;bits/stdc++;。h>;?

C++ 为什么不包括<;bits/stdc++;。h>;?,c++,portability,turbo-c++,c++-faq,implementation-defined-behavior,C++,Portability,Turbo C++,C++ Faq,Implementation Defined Behavior,我用我的代码发布了一个问题,其唯一的#include指令如下: #include <bits/stdc++.h> #包括 我的老师让我这样做,但在评论部分我被告知我不应该这样做 为什么?包括似乎是越来越常见的堆栈溢出现象,可能是本学年国家课程中新增的内容 我想这些优势大概是这样给出的: 你只需要写一行 您不需要查找所有内容所在的标准标题 不幸的是,这是一个懒惰的黑客行为,直接命名一个GCC内部头,而不是像、和这样的单个标准头。它破坏了便携性,培养了可怕的习惯 缺点包括: 它

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

#include <bits/stdc++.h>
#包括
我的老师让我这样做,但在评论部分我被告知我不应该这样做


为什么?

包括
似乎是越来越常见的堆栈溢出现象,可能是本学年国家课程中新增的内容

我想这些优势大概是这样给出的:

  • 你只需要写一行
  • 您不需要查找所有内容所在的标准标题
不幸的是,这是一个懒惰的黑客行为,直接命名一个GCC内部头,而不是像
这样的单个标准头。它破坏了便携性,培养了可怕的习惯

缺点包括:

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


更多信息:

Quora不好的原因示例:


    • 为什么?因为它被用作它应该是C++标准的头,但是没有标准提到它。因此,通过构造,您的代码是不可移植的。您在上找不到有关它的任何文档。所以它也可能不存在。这是一个虚构的人的想象力:)

      <>我发现我的恐惧和不相信——有一个众所周知的教程站点,其中<>强>每个C++示例似乎包含了这个标题< /强>。世界是疯狂的。这就是证据


      任何人写这样的“教程”

      请停止使用此标题。算了吧。不要传播这种疯狂。如果你不愿意理解为什么这样做是错误的,相信我的话。在任何事情上,我都不能被当作权威人物对待,我可能有一半的时间都是这样,但我只会在这一个案例中破例。我声称我知道我在说什么。相信我的话。我恳求你

      另外,我可以很好地想象这个邪恶的想法可能发生的可恶的“教学标准”,以及导致它的环境。仅仅因为它似乎有实际的需要,并不意味着它是可以接受的——即使是回顾过去


      p.p.S.不,没有实际需要。没有那么多C++标准头,它们都有很好的文档。如果你教书,你在学生身上加上这种“魔法”是在伤害他们。我们最不希望的事情就是用一种神奇的思维方式培养程序员。如果你需要为学生提供一个子集C++,以使他们的生活更简单,只需制作一个讲义,其中有一个简短的列表,适用于你所教的课程,并为你希望学生使用的库结构提供简明的文档。

      < P>有一个叫做“栈交换”的站点。该网站上的编程难题符合以下定义:

      玩具一种玩具、问题或其他发明,通过提出需要通过独创性或耐心的努力来解决的困难来娱乐

      它们的设计目的是为了娱乐,而不是让一个正在工作的程序员对日常工作中遇到的现实问题感到娱乐

      是“一种娱乐性的计算机编程竞赛,参赛者努力获得实现某种算法的尽可能短的源代码。”在PP&CG网站上的答案中,你会看到人们在答案中指定字节数。当他们找到一种方法来删除几个字节时,他们将删除原来的数字并记录新的数字

      正如您所料,代码高尔夫会奖励极端的编程语言滥用。一个字母的变量名。没有空格。创造性地利用图书馆的功能。未记录的特征。非标准编程实践。骇人听闻的黑客

      如果程序员在工作中提交了一个包含高尔夫风格代码的pull请求,它将被拒绝。他们的同事会嘲笑他们。他们的经理会到他们的办公桌旁聊天。即便如此,程序员还是通过向PP&CG提交答案来自娱自乐

      这与stdc++.h有什么关系?正如其他人所指出的,使用它是懒惰的。它是不可移植的,所以您不知道它是否能在您的编译器或下一版本的编译器上工作。它会养成坏习惯。它是非标准的,因此您的程序的行为可能与您期望的不同。它可能会增加编译时间和可执行文件的大小

      这些都是有效和正确的反对意见。那么为什么会有人使用这个怪物呢

      事实证明,有些人喜欢没有代码的编程难题。他们聚在一起,在ACM-ICPC、谷歌代码堵塞和Facebook黑客杯等活动上,或在Topcoder和Codeforces等网站上竞争。他们的排名基于程序正确性、执行速度以及提交解决方案的速度。为了最大化执行速度,许多参与者使用C++。为了最大限度地提高编码速度,其中一些使用
      stdc++.h

      这是个好主意吗?让我们检查一下缺点清单。便携性?这并不重要,因为这些编码活动使用参赛者事先知道的特定编译器版本。符合标准?与使用寿命小于一小时的代码块无关。编译时间和可执行文件大小?这些不是比赛评分标准的一部分

      所以我们留下了坏习惯。这是一个合理的反对意见。通过使用这个头文件,参赛者避免了学习哪个标准头文件的机会
      <algorithm> <future> <numeric> <strstream>
      <any> <initializer_list> <optional> <system_error>
      <array> <iomanip> <ostream> <thread>
      <atomic> <ios> <queue> <tuple>
      <bitset> <iosfwd> <random> <type_traits>
      <chrono> <iostream> <ratio> <typeindex>
      <codecvt> <istream> <regex> <typeinfo>
      <complex> <iterator> <scoped_allocator> <unordered_map>
      <condition_variable> <limits> <set> <unordered_set>
      <deque> <list> <shared_mutex> <utility>
      <exception> <locale> <sstream> <valarray>
      <execution> <map> <stack> <variant>
      <filesystem> <memory> <stdexcept> <vector>
      <forward_list> <memory_resorce> <streambuf>
      <fstream> <mutex> <string>
      <functional> <new> <string_view>
      
      *  This is an internal header file, included by other library headers.
      *  Do not attempt to use it directly. 
      
      *  This is an implementation file for a precompiled header.
      
      #include <bits/stdc++.h>
      
      import java.*.*
      
      #include <bits/stdc++.h>