Использование заголовков библиотеки C++
Чтобы включить содержимое стандартного заголовка, необходимо указать его рядом с директивой include.
#include <iostream>// include I/O facilities
Вы можете включать стандартные заголовки в любом порядке — вы можете включить несколько стандартных заголовков или два или более стандартных заголовка, которые определяют один и тот же макрос или один и тот же тип. Не включайте стандартный заголовок в объявление. Не определяйте макросы с теми же именами, что и ключевые слова, прежде чем включать стандартный заголовок.
Заголовок библиотеки C++ включает все остальные заголовки библиотеки C++ для определения необходимых типов. (Всегда включать явным образом любые заголовки библиотекИ C++, необходимые в единице перевода, однако, если вы угадаете неправильно о его фактических зависимостях.) Стандартный заголовок C никогда не включает другой стандартный заголовок. Стандартный заголовок объявляет и определяет только сущности, описанные для него в этом документе.
Каждая функция в библиотеке объявляется в стандартном заголовке. В отличие от стандартного языка C стандартный заголовок никогда не предоставляет маскирование макроса с тем же именем по аналогии с функцией, которая маскирует объявление функции и позволяет добиться того же эффекта. Дополнительные сведения о маскировании макросов см. в разделе Соглашения библиотеки C++.
Все имена, отличные от operator delete
и operator new
, в заголовках библиотеки C++ определяются в пространстве имен std
или в пространстве имен, которое вложено в пространство имен std
. Вы ссылаетесь на имя cin
, например std::cin
. Обратите внимание, что имена макросов не подлежат квалификации пространства имен, поэтому вы всегда записываете __STD_COMPLEX
без квалификатора пространства имен.
В некоторых средах перевода включение заголовка библиотеки C++ может привести к добавлению внешних имен, объявленных в пространстве имен std
, в глобальное пространство имен с индивидуальными объявлениями using
для каждого из таких имен. В противном случае заголовок не содержит никаких имен библиотек в текущее пространство имен.
Стандарт C++ требует, чтобы в стандартных заголовках языка C все внешние имена объявлялись в пространстве имен std
. После этого эти имена расширяются в глобальное пространство имен с отдельными using
объявлениями для каждого из имен. Однако в некоторых средах преобразования в стандарте C заголовки не включают объявлений пространств имен и все имена объявляются непосредственно в глобальном пространстве имен. Таким образом, для обеспечения максимальной переносимости при работе с пространствами имен следует соблюдать два правила:
Чтобы гарантированно объявить в пространстве
std
имен внешнее имя, которое традиционно объявлено в<stdlib.h>
, например, включает заголовок<cstdlib>
. Помнить, что имена также могут быть объявлены в глобальном пространстве имен.Чтобы гарантированно объявить в глобальном пространстве имен внешнее имя, объявленное в
<stdlib.h>
, добавьте заголовок<stdlib.h>
напрямую. Помнить, что имена также могут быть объявлены в пространстве именstd
.
Таким образом, если вы хотите std::abort
вызвать ненормальное завершение, следует включить <cstdlib>
. Если вы хотите вызвать abort
, следует включить <stdlib.h>
.
Также можно написать объявление:
using namespace std;
которое переводит все имена библиотек в текущее пространство имен. Если разместить это объявление сразу после всех директив include, вы расширите имена в глобальное пространство имен. В оставшейся части записи блока преобразования пространства имен можно не учитывать. Вы также сможете избежать большинства различий между различными средами преобразования.
Если явно не указано иначе, вы не можете определять в своей программе имена в пространстве имен std
или пространстве имен, вложенном в пространство имен std
.
См. также
Общие сведения о стандартной библиотеке C++
Потокобезопасность в стандартной библиотеке C++