Как #include <bits/stdС++. H> работает в С++?

Я прочитал из codeforces Блог, который, если мы #include <bits/stdc++.h> в программе C++, тогда нет необходимости включать какие-либо другие файлы заголовков. как работает #include <bits/stdc++.h>, и нормально ли использовать его вместо включения отдельных файлов заголовков?

Ответ 1

В основном это заголовочный файл, который также включает в себя каждую стандартную библиотеку и stl include file. Единственная цель, которую я могу увидеть, - это тестирование и образование.

<p> GCC 4.8.0/bits/stdc++.h источник.

Использование этого будет включать в себя много лишних вещей и увеличивает время компиляции.

Изменить: Как говорит Нил, это реализация для предварительно скомпилированных заголовков. Если вы правильно настроили его для предварительной компиляции, это фактически ускорит время компиляции в зависимости от вашего проекта. (https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html)

Я бы предположил, что вам потребуется время, чтобы узнать о каждом из заголовков sl/stl и включить их отдельно, а не использовать "суперзбудители", кроме прекомпиляции.

Ответ 2

#include <bits/stdc++.h> - файл реализации для предварительно скомпилированного заголовка.

С точки зрения разработки программного обеспечения, рекомендуется минимизировать включение. Если вы его используете, на самом деле это включает в себя множество файлов, которые могут не понадобиться вашей программе, поэтому без необходимости увеличивать время компиляции и размер программы.

Но в конкурсах использование этого файла - хорошая идея, когда вы хотите сократить время, затрачиваемое на занятие работой; особенно когда ваш ранг чувствителен к времени.

Он работает в большинстве онлайн-судей, в среде программирования, включая ACM-ICPC (субрегиональные, региональные и мировые финал) и многие онлайн-судьи.

Недостатки этого в том, что он

  • увеличивает время компиляции.
  • использует внутренний нестандартный заголовочный файл библиотеки GNU С++ и поэтому не будет компилироваться в MSVC, XCode и многих других компиляторах

Ответ 3

Этот заголовочный файл не является частью стандарта С++, поэтому он не переносится и его следует избегать.

Кроме того, даже если в стандарте есть какой-то заголовок, все же нужно избегать его вместо конкретных заголовков, поскольку компилятор должен действительно читать и анализировать каждый включенный заголовок (включая рекурсивно включенные заголовки) каждый один раз, когда скомпилирована единица перевода.