Pourquoi devrais-je pas #include <bits/stdc++.h>?

J'ai posté une question avec mon code, dont le seul #include directive était le suivant:

#include <bits/stdc++.h>

Mon professeur m'a dit de le faire, mais dans la section des commentaires, j'ai été informé que je ne devrais pas.

Pourquoi?

  • Hein. J'aurais du me douter qu'il y aurait un inclure la version de using namespace std; là, quelque part.
  • pourquoi cette tête de même exister? assurément, c'est de la norme inclut comprennent, en fait, puisque cela permettrait d'apporter beaucoup d'ordure? et si ce n'est pas compris par tout le public comprend... alors pourquoi est-il livré dans la distribution?
  • C'est un détail d'implémentation. Il ne fait pas partie de la "API publique" ou destinées à l'utilisation. Mais il a encore à être expédiés sinon rien ne fonctionne. La norme comprend peut pas l'utiliser individuellement, mais il est là pour une utilisation dans les en-têtes précompilés. Voir le commentaire en haut, qui dit: "Ceci est un fichier de mise en oeuvre pour un en-tête précompilé.".
  • Si vous n'êtes pas censé l'utiliser vous-même, comment son existence à aider avec la PCH? Ou est gcc assez intelligent pour passer automatiquement de l'un à l'autre pour PCH fins dans certaines circonstances?
  • Bonne question. Euh, je ne sais pas vraiment, mais c'est probablement ce que je pensais oui. Peut-être une bonne question dans son propre droit.
  • "Il ne fait pas partie de la "API publique" ou destinées à l'utilisation." Tout à fait tort, il est destiné à l'usage public, comme un en-tête précompilé. Libstdc++ (pré)compile et installe une version compilée de cet en-tête, donc si vous l'incluez alors G++ incluent bits/stdc++.h.gch au lieu de cela, la version compilée. Il existe parce qu'il a d'exister, de sorte que la version compilée de ce fichier peut être généré.
  • L'API publique de la bibliothèque standard, je veux dire; pas de libstdc++. Les gens de l'utiliser sur un Débordement de Pile tous les jours (et dans leurs projets) ne sont pas de l'utiliser pour la raison, ou, dans le cas d'utilisation, que vous êtes en train de parler. Bien sûr, mon commentaire a été formulé avec plus de précision, mais notez que je n'ai point de son utilisation pour les en-têtes précompilés. N'hésitez pas à écrire une autre réponse.