iostream
- это файл заголовка, в котором содержатся объявления и прототипы, являющиеся интерфейсом к части стандартной библиотеки C ++.
В вашей системе есть файл с именем "iostream" (без расширения), содержимое которого копируется и вставляется (с рекурсивной обработкой #include
s) в точку, где вы пишете #include <iostream>
.
#include
директивы всегда извлекают содержимое заголовочных файлов, они никогда не добавляют «библиотеки». Заголовочные файлы часто содержат объявления и прототипы, которые являются интерфейсом к библиотеке, но сами библиотеки подключаются к вашей программе с помощью компоновщика, а не компилятора. При связывании программы на C ++ компоновщик автоматически присоединит стандартную библиотеку C ++, если вы не скажете ей об этом, поэтому вам не нужно об этом беспокоиться.
Аналогично, оператор using namespace std
не выполняет работу по подключению библиотеки. Это утверждение делает так, что вы можете написать, например, cout
или string
вместо того, чтобы квалифицировать их как std::cout
и std::string
. Это работает для любого пространства имен, но обычно не рекомендуется.
Для трех приведенных вами примеров все они дают вам определения и прототипы, необходимые для использования части iostream стандартной библиотеки C ++, но (2) предпочтительнее, (1) приемлемо и (3) устарело , (2) дает дополнительное удобство возможности опускать префикс std::
(за счет сокращения имен переменных, доступных для использования вами), и (3) включает в себя другой файл с именем «iostream.h» вместо «iostream», что обычно является одним и тем же, но файл с .h является реликвией предстандартного C ++ и поэтому может не поддерживаться в будущих компиляторах.