<iostream> по сравнению с <iostream.h> по сравнению с “iostream.h”

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
32
задан amit jha 27 July 2015 в 07:24
поделиться

6 ответов

Короче говоря:

iostream.h удерживается от использования - это - исходная версия Stroustrup, и iostream является версией из комитета по стандартам. Обычно компиляторы указывают на них обоих на то же самое, но некоторые более старые компиляторы не будут иметь более старого. В некоторых нечетных случаях они будут и существовать и отличаться (для поддержки унаследованного кода), и затем необходимо быть конкретными.

"" по сравнению с <> просто означает, проверяют локальные каталоги на заголовок прежде, чем идти в библиотеку (в большинстве компиляторов).

-Adam

49
ответ дан 27 November 2019 в 20:29
поделиться

Вот достойная ссылка статья.

подводя итоги, приведенная причина:

версия iostream библиотеки, которую произвел Комитет по Стандартам, вполне несколько отличалась от реализации CFront. {Надрез}

Для упрощения перехода Комитет по Стандартам C++ объявил, что код включая стандартные заголовки C++ будет использовать, включают директивы, которые испытывают недостаток в расширении. Этот позволенный компилятор поставщики для поставки старого стиля заголовки библиотеки C++ с.h расширением и модернизированные заголовки без.

преимущество не использования.h версии:

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

7
ответ дан 27 November 2019 в 20:29
поделиться

Обычно <> используется для системы или стандартных файлов библиотеки, тогда как "" используется для файлов проекта. Я не был бы удивлен, ищет ли Ваш компилятор локально и когда он не может найти его, он принимает значение по умолчанию к стандартной версии библиотеки.

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

1
ответ дан 27 November 2019 в 20:29
поделиться

Стандартным путем (и единственный гарантировал, что работал) является < iostream>. на gcc, < iostream.h> (который, возможно, должен был бы быть включен как < backward/iostream.h>) вытягивает соответствующие объявления к глобальному пространству имен (таким образом, Вам не нужен станд.:: префикс пространства имен).

"iostream.h" попробовал бы сначала из каталога с Вашим исходным кодом, так как "" предназначен для заголовков из Вашего проекта. < > должен всегда использоваться для системных заголовков, и "" для Ваших собственных заголовков.

2
ответ дан 27 November 2019 в 20:29
поделиться

Это действительно два различных вопроса.

  • различие между.h и заголовками без расширения с тем же именем является историческим. Те с.h расширением из исходного стандарта C++, который не имел некоторых современных функций, таких как пространства имен и шаблоны. Было более просто для нового стандарта поместить ту же самую функциональность в новые заголовочные файлы, чтобы смочь использовать эти новые функции и сохранить старые (.h) файлы для обратной совместимости унаследованного кода.

  • различие между #include <...> и #include "..." формат является порядком, в котором компилятор ищет файлы. Это является обычно зависящим от реализации, но идея состоит в том что <> взгляды формата в системе включают каталоги сначала, в то время как "" смотрит в том же каталоге как исходный файл что #included это сначала.

1
ответ дан 27 November 2019 в 20:29
поделиться

Простой ответ на первый ответ - то, что iostream.h не существует, по крайней мере, в реализации GCC. Если Вы идете *, отклоняют, % типа

определяют местоположение iostream.h
/usr/include/c ++/3.4.3/backward/iostream.h

и

, % определяет местоположение iostream
/usr/include/c ++/3.4.3/iostream
/usr/include/c ++/3.4.3/backward/iostream.h

, Как в статье Zee говорится, iostream.h для обратной совместимости.

0
ответ дан 27 November 2019 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: