Подтвердить что ты не робот

Разница между iostream и iostream.h

В чем разница между iostream и iostream.h?

4b9b3361

Ответ 1

iostream.h устарел теми компиляторами, которые его предоставляют, iostream является частью стандарта С++.

Чтобы яснее пояснить, в текущем стандарте С++ вообще не упоминается iostream.h (INCITS ISO IEC 14882 2003).

Изменить: как упоминал @Jerry, не только текущий стандарт не упоминает об этом, но и не указывает на стандарт для С++.

Ответ 2

iostream является стандартным заголовком. iostream.h - это нестандартный заголовок, который был очень распространен в пред-стандартном С++, и это то, из чего произошел iostream. По-прежнему распространено использование iostream.h, предположительно для использования со старыми программами.

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

Если ваша реализация имеет как iostream, так и iostream.h, iostream, вероятно, будет работать как:

namespace std
{
#include <iostream.h>
}

хотя это не обязательно, как оно написано.

Ответ 3

Когда С++ был впервые создан, все файлы в стандартной библиотеке времени выполнения закончились на .h. Жизнь была последовательной, и это было хорошо. Оригинальная версия cout и cin проживала в iostream.h. Когда язык был стандартизован комитетом ANSI, они решили перенести все функции в библиотеке времени выполнения в пространство имен std (что обычно является хорошей идеей). Однако это показало проблему: если они переместили все функции в пространство имен std, ни одна из старых программ не будет работать больше!

Чтобы попытаться обойти эту проблему, сохраняя обратную совместимость для старых программ, был введен новый набор файлов заголовков, которые используют одни и те же имена, но не имеют расширения .h. Эти новые файлы заголовков имеют всю функциональность внутри пространства имен std. Таким образом, старые программы, которые включают #include <iostream.h>, не нужно переписывать, а более новые программы могут #include <iostream>.

Когда вы включаете файл заголовка из стандартной библиотеки, убедитесь, что вы используете версию .h, если она существует. В противном случае вы будете использовать устаревшую версию заголовка, которая больше не поддерживается.

Кроме того, многие библиотеки, унаследованные от C, которые все еще были полезны в С++, получили префикс c (например, stdlib.h стал cstdlib). Функциональность этих библиотек также была перенесена в пространство имен std, чтобы избежать коллизий имен.

Однако, когда вы пишете свои собственные файлы заголовков, вы должны предоставить им все расширение .h, поскольку вы не будете помещать свой код в пространство имен std.

Правило: используйте версию .h версии библиотеки, если она существует, и получите доступ к функциям через пространство имен std. Если версия .h не существует или вы создаете свои собственные заголовки, используйте .h версию