Я прочитал из codeforces Блог, который, если мы #include <bits/stdc++.h>
в программе C++
, тогда нет необходимости включать какие-либо другие файлы заголовков. как работает #include <bits/stdc++.h>
, и нормально ли использовать его вместо включения отдельных файлов заголовков?
Как #include <bits/stdС++. 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
Этот заголовочный файл не является частью стандарта С++, поэтому он не переносится и его следует избегать.
Кроме того, даже если в стандарте есть какой-то заголовок, все же нужно избегать его вместо конкретных заголовков, поскольку компилятор должен действительно читать и анализировать каждый включенный заголовок (включая рекурсивно включенные заголовки) каждый один раз, когда скомпилирована единица перевода.