Организация стандартной библиотеки
Средства стандартной библиотеки определены в пространстве имён stdи представлены набором заголовочных файлов. Следует обратить внимание на то, чтоимена заголовочных файлов имеют вид <X>, а не <X.h>, например <vector>, <map>, <list>. И хотя некоторые компиляторы поддерживают заголовочный файлы в виде <X.h>, например <vector.h>, не следует использовать эту возможность, так как она не соответствует стандарту языка.
Стандартный заголовочный файл, имя которого начинается с буквы c(за исключением<complex>), эквивалентен заголовочному файлу в стандартной библиотекеC. Для каждого заголовочного файла<X.h>, определяющего часть стандартной библиотеки в глобальном пространстве имён, существует заголовок<cX>, определяющий эти же имена в пространстве имёнstd.Однако при использовании заголовочных файлов вида<cX> нет необходимости явно указывать пространство имен std, так как все имена уже явно введены в глобальное пространство имен.
Ниже приведены примеры использования заголовочных файлов стандартной библиотеки.
Пример 1. Ввод/вывод в стиле С
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("Hello World!\n");
return 0;
}
Пример 2. Ввод/вывод в стиле С, использование нового заголовочного файла
Использован новый заголовочный файл, в остальном программа не изменилась. Тот факт, что в данном примере функция printfнаходится в пространстве именstd, не влияет на остальной код, так как функцияprintfбыла введена в глобальное пространство имен.
Использование новых заголовочных файлы вида <cX> вместо <X.h>, не требует изменения остального кода
#include <сstdio>
int main(int argc, char* argv[])
{
printf("Hello World!\n");
return 0;
}
Пример 3. Ввод/вывод в стиле С, использование нового заголовочного файла
Пример практически аналогичен предыдущего, за исключением, того что явно показано, что функция printfпринадлежит пространству именstd.
#include <cstdio>
int main(int argc, char* argv[])
{
std::printf("Hello World!\n");
return 0;
}
Пример 4. Ввод/вывод в стиле С++
Необходимо обратить внимание, что в примере явно указано пространство имен в котором находится cout.
#include <iostream>
int main(int argc, char* argv[])
{
std::cout<<"Hello World!\n";
return 0;
}
Пример 5. Ввод/вывод в стиле С++
Пример аналогичен предыдущему за исключением, того, что все имена пространства stdвнесены в глобальное пространство (нет необходимости использовать префиксstd::).
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
cout<<"Hello World!\n";
return 0;
}
Пример 6. Ввод/вывод в стиле С++ (нестандартный вариант)
Приведенный ниже код правильно компилируется некоторыми компиляторами, но не соответствует стандарту и поэтому не должен использоваться.
#include <iostream.h>
int main(int argc, char* argv[])
{
cout<<"Hello World!\n";
return 0;
}
Требования стандарта налагают некоторые ограничение на использование заголовочных файлов. Пользователю и разработчику библиотеки не разрешается добавлять или убирать объявления из стандартных заголовочных файлов. Также недопустимо пытаться изменить содержимое заголовочных файлов, определяя макросы до вставки заголовочных файлов, или пытаться изменить смысл объявлений в заголовочных файлах путём объявлений в их контексте.
Для использования возможностей стандартной библиотеки должен быть включён её заголовочный файл. Написание соответствующих объявлений самостоятельно не соответствует стандарту. Дело в том, что некоторые реализации языка C++ могут оптимизировать процесс компиляции, основываясь на включении стандартных заголовочных файлов, а другие обеспечивать оптимизированную реализацию средств стандартной библиотеки, вводимых заголовочными файлами.