Как уже упоминалось @ Marcelo Cantos , вы можете включить объявление классов и функций iostream, не включая полные определения. В C и C ++ объявление - это утверждение, которое гласит: «здесь есть имя чего-то (функция / класс / и т. название". Для функции это означает имя функции, но не тело, содержащее код функции. Для класса это означает имя класса, но не какие-либо переменные или методы-члены класса.
И наоборот, определение - это полное определение: тело функции, члены класса и т. Д.
Зачастую вам нужно только объявить что-то для использования - в случае функции вам не нужно знать, как выглядит тело функции, чтобы вызвать ее (кроме случаев шаблонных или встроенных функций) , Аналогично, с классом вам не нужно знать, какие члены есть у класса, если все, что вы делаете, это передаете указатели или ссылки на экземпляры этого класса. Но как только вам понадобится получить доступ к переменной-члену или вызвать метод класса, вам понадобится полное определение.
Включая только объявления вместо определений, общий объем кода, который должен обрабатывать компилятор, намного, намного меньше, и, следовательно, компиляция будет выполняться намного быстрее.
Чтобы дать вам представление о том, сколько кода обрабатывается, вот, сколько кода содержится в моей локальной реализации:
# The following commands create a source file that includes a single header
# file (on stdout), preprocess it with g++ -E, and then count how many lines
# are in the resulting preprocessed output
$ echo '#include <iosfwd>' | g++ -E -xc++ - | wc
2598 6534 57875
$ echo '#include <iostream>' | g++ -E -xc++ - | wc
25631 59613 631998
Файл, который включает <iosfwd>
, компилятор должен обработать 2598 строк кода из различных заголовочных файлов, тогда как файл, который включает <iostream>
, должен обработать колоссальные 25631 строк кода. Это до того, как вы скомпилируете нужный код в исходный файл!