[contents] описывает сущности и макросы, определенные в стандартной библиотеке C ++. [headers] перечисляет заголовки стандартной библиотеки и некоторые ограничения на эти заголовки. [compliance] перечисляет требования к автономной реализации стандартной библиотеки C ++.
Стандартная библиотека C ++ предоставляет определения для сущностей и макросов, описанных в резюме заголовков стандартной библиотеки C ++ ([headers]).
Все объекты библиотеки, кроме operator new и operator delete , определены в пространстве имен std или пространствах имен, вложенных в пространство имен std. Не указано, объявляются ли имена, объявленные в определенном пространстве имен, непосредственно в этом пространстве имен или во встроенном пространстве имен внутри этого пространства имен.166167
Всякий раз, когдаx упоминается имя, определенное в стандартной библиотеке,x предполагается , что имя полностью определено как ::std::x, если явно не указано иное. Например, еслиEffects: раздел для библиотечной функцииF описывается как вызывающая библиотечная функцияG,::std::G имеется в виду функция .
Заголовки стандартной библиотеки C (Приложение[depr.c.headers]) также определяют имена в глобальном пространстве имен, в то время как заголовки C ++ для средств библиотеки C ([headers]) могут также определять имена в глобальном пространстве имен.
Это дает разработчикам свободу использовать встроенные пространства имен для поддержки нескольких конфигураций библиотеки.
Каждый элемент стандартной библиотеки C ++ объявлен или определен (при необходимости) в файле header.168
Стандартная библиотека C ++ предоставляет C++ library headers, как показано в Табл16.
<algorithm> | <future> | <numeric> | <strstream> |
<any> | <initializer_list> | <optional> | <system_error> |
<array> | <iomanip> | <ostream> | <thread> |
<atomic> | <ios> | <queue> | <tuple> |
<bitset> | <iosfwd> | <random> | <type_traits> |
<chrono> | <iostream> | <ratio> | <typeindex> |
<codecvt> | <istream> | <regex> | <typeinfo> |
<complex> | <iterator> | <scoped_allocator> | <unordered_map> |
<condition_variable> | <limits> | <set> | <unordered_set> |
<deque> | <list> | <shared_mutex> | <utility> |
<exception> | <locale> | <sstream> | <valarray> |
<execution> | <map> | <stack> | <variant> |
<filesystem> | <memory> | <stdexcept> | <vector> |
<forward_list> | <memory_resource> | <streambuf> | |
<fstream> | <mutex> | <string> | |
<functional> | <new> | <string_view> |
Возможности стандартной библиотеки C представлены в дополнительных заголовках, показанных в таблице17.169
<cassert> | <cinttypes> | <csignal> | <cstdio> | <cwchar> |
<ccomplex> | <ciso646> | <cstdalign> | <cstdlib> | <cwctype> |
<cctype> | <climits> | <cstdarg> | <cstring> | |
<cerrno> | <clocale> | <cstdbool> | <ctgmath> | |
<cfenv> | <cmath> | <cstddef> | <ctime> | |
<cfloat> | <csetjmp> | <cstdint> | <cuchar> |
За исключением указанных в пунктах[library] через[thread] и приложение[depr], содержание каждого заголовкаcname такое же , как и у соответствующего заголовка ,name.h как указано в разделеC standard library. Однако в стандартной библиотеке C ++ объявления (за исключением имен, которые определены как макросы в C) находятся в пределах namespace scope пространства именstd. Не указано, были ли эти имена (включая любые перегрузки, добавленные в разделах[language.support] по[thread] и Приложение[depr]) сначала объявлены в области глобального пространства имен, а затемstd явно введены в пространство имен using-declarations.
Имена, которые определены как макросы в C, должны определяться как макросы в стандартной библиотеке C ++, даже если C предоставляет лицензию на реализацию в качестве функций. [ Note: Имена , определенные как макросы в C включают в себя следующее: assert,offsetof,setjmp,va_arg, va_end, иva_start. ] — end note
Имена, которые определены как функции в C, должны быть определены как функции в стандартной библиотеке C ++.170
Идентификаторы, которые являются ключевыми словами или операторами в C ++, не должны определяться как макросы в заголовках стандартной библиотеки C ++.171
[depr.c.headers], Заголовки стандартной библиотеки C, описывает эффекты использования формыname.h (заголовок C) в программе на C ++.172
Приложение K к стандарту C описывает большое количество функций с соответствующими типами и макросами, которые «способствуют более безопасному и безопасному программированию», чем многие традиционные функции библиотеки C. Имена функций имеют суффикс_s; большинство из них предоставляют ту же услугу, что и функция библиотеки C с именем без суффиксов, но обычно принимают дополнительный аргумент, значение которого является размером массива результатов. Если включен какой-либо заголовок C ++, это определяется реализацией, объявлено ли какое-либо из этих имен в глобальном пространстве имен. (Ни один из них не объявлен в пространстве именstd.)
В таблице18 перечислены имена Приложения K, которые могут быть объявлены в каком-либо заголовке. На эти имена также распространяются ограничения[macro.names].
abort_handler_s | mbstowcs_s | strncat_s | vswscanf_s |
asctime_s | memcpy_s | strncpy_s | vwprintf_s |
bsearch_s | memmove_s | strtok_s | vwscanf_s |
constraint_handler_t | memset_s | swprintf_s | wcrtomb_s |
ctime_s | printf_s | swscanf_s | wcscat_s |
errno_t | qsort_s | tmpfile_s | wcscpy_s |
fopen_s | RSIZE_MAX | TMP_MAX_S | wcsncat_s |
fprintf_s | rsize_t | tmpnam_s | wcsncpy_s |
freopen_s | scanf_s | vfprintf_s | wcsnlen_s |
fscanf_s | set_constraint_handler_s | vfscanf_s | wcsrtombs_s |
fwprintf_s | snprintf_s | vfwprintf_s | wcstok_s |
fwscanf_s | snwprintf_s | vfwscanf_s | wcstombs_s |
getenv_s | sprintf_s | vprintf_s | wctomb_s |
gets_s | sscanf_s | vscanf_s | wmemcpy_s |
gmtime_s | strcat_s | vsnprintf_s | wmemmove_s |
ignore_handler_s | strcpy_s | vsnwprintf_s | wprintf_s |
L_tmpnam_s | strerror_s | vsprintf_s | wscanf_s |
localtime_s | strerrorlen_s | vsscanf_s | |
mbsrtowcs_s | strlen_s | vswprintf_s |
Заголовок не обязательно является исходным файлом, и последовательности, разделенные< и> в именах заголовков, не обязательно являются допустимыми именами исходного файла ([cpp.include]).
Это намеренное , что не существует C ++ заголовок для любого из этих заголовков C: , , .<stdatomic.h><stdnoreturn.h><threads.h>
Это запрещает практику, разрешенную в C, по предоставлению макроса маскировки в дополнение к прототипу функции. Единственный способ добиться эквивалентного встроенного поведения в C ++ - предоставить определение как внешнюю встроенную функцию.
В частности, включение стандартного заголовка<iso646.h> ни на<ciso646> что не влияет.
Эти ".h" заголовки сваливать все свои имена в глобальное пространство имен, в то время как новые формы сохраняют свои имена в пространстве именstd. Следовательно, новые формы являются предпочтительными формами для всех целей, кроме программ C ++, которые предназначены для строгой совместимости с C.
Определены два типа реализаций: hosted и freestanding ([intro.compliance]). Для размещенной реализации этот международный стандарт описывает набор доступных заголовков.
Автономная реализация имеет набор заголовков, определяемый реализацией. Этот набор должен включать как минимум заголовки, показанные в таблице19.
Подпункт | Заголовок (ы) | |
<ciso646> | ||
[support.types] | Типы | <cstddef> |
[support.limits] | Свойства реализации | <cfloat><limits><climits> |
[cstdint] | Целочисленные типы | <cstdint> |
[support.start.term] | Начало и завершение | <cstdlib> |
[support.dynamic] | Динамическое управление памятью | <new> |
[support.rtti] | Идентификация типа | <typeinfo> |
[support.exception] | Обработка исключений | <exception> |
[support.initlist] | Списки инициализаторов | <initializer_list> |
[support.runtime] | Другая поддержка во время выполнения | <cstdarg> |
[meta] | Типовые черты | <type_traits> |
[atomics] | Атомика | <atomic> |
[depr.cstdalign.syn],[depr.cstdbool.syn] | Устаревшие заголовки | <cstdalign><cstdbool> |
Прилагаемая версия заголовка объявляет , по меньшей мере функции , , , , и ( ). Остальные заголовки, перечисленные в этой таблице, должны соответствовать тем же требованиям, что и для размещенной реализации.<cstdlib> abortatexitat_quick_exitexitquick_exit [support.start.term]