Namespaces
Variants

C++ Standard Library

From cppreference.net

Стандартная библиотека C++ предоставляет широкий спектр возможностей, пригодных для использования в стандартном C++.

Содержание

Категория

Библиотека поддержки языка предоставляет компоненты, требуемые определёнными частями языка C++, такие как выделение памяти ( new / delete ) и обработка исключений .

Библиотека concepts описывает компоненты библиотеки, которые программы на C++ могут использовать для проверки аргументов шаблонов на этапе компиляции и выполнения диспетчеризации функций на основе свойств типов.

(since C++20)

Библиотека диагностики предоставляет единообразную структуру для сообщения об ошибках в программе на C++, включая предопределенные классы исключений .

Библиотека управления памятью предоставляет компоненты для управления памятью, включая умные указатели и scoped allocator (since C++11) .

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

(начиная с C++11)

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

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

Библиотека строк предоставляет поддержку для манипуляции текстом, представленным в виде однородных последовательностей следующих типов: char , char8_t (начиная с C++20) , char16_t , char32_t (начиная с C++11) , wchar_t , и любых других символьных типов.

Библиотека обработки текста предоставляет сопоставление и поиск регулярных выражений (since C++11) , утилиты для форматирования текста (since C++20) , идентификации кодировок текста (since C++26) и средства локализации .

Библиотека numerics предоставляет numeric algorithms и компоненты для работы с complex number , расширяющие поддержку численной обработки. Компонент valarray обеспечивает поддержку групповой обработки данных, потенциально реализуемой как параллельные операции на платформах с поддержкой такой обработки. Компонент random number предоставляет средства для генерации псевдослучайных чисел. (since C++11)

Библиотека времени предоставляет общеполезные утилиты для работы со временем.

Библиотека ввода/вывода предоставляет компоненты iostream , которые являются основным механизмом для ввода и вывода в программах на C++. Они могут использоваться вместе с другими элементами библиотеки, в частности со строками, локалями и итераторами.

Библиотека поддержки потоков предоставляет компоненты для создания и управления потоками, включая атомарные операции , взаимное исключение и межпоточное взаимодействие.

(since C++11)

Библиотека поддержки выполнения предоставляет фреймворк для управления асинхронным выполнением на общих ресурсах выполнения.

(since C++26)

Содержимое библиотеки

Стандартная библиотека C++ предоставляет определения для сущностей и макросов , описанных в синопсисах заголовков стандартной библиотеки C++ , если не указано иное.

Все элементы библиотеки, за исключением operator new и operator delete , определены в пространстве имен std или пространствах имен , вложенных в пространство имен std (за исключением элементов для средств стандартной библиотеки C, см. ниже). Не указано, объявляются ли имена, объявленные в конкретном пространстве имен, непосредственно в этом пространстве имен или во встроенном пространстве имен внутри этого пространства имен. (начиная с C++11)

Заголовки

Каждый элемент стандартной библиотеки C++ объявляется или определяется (где уместно) в заголовочном файле . Заголовочный файл не обязательно является исходным файлом, и последовательности, ограниченные < и > в именах заголовочных файлов, не обязательно являются допустимыми именами исходных файлов.

Стандартная библиотека C++ предоставляет заголовки библиотеки C++ и дополнительные заголовки C++ для средств библиотеки C (см. страницу « headers » для описаний):

**Примечание:** В данном фрагменте HTML нет текста для перевода - все содержимое состоит из HTML-тегов, атрибутов и названий заголовочных файлов C++ внутри тегов ` `, которые согласно инструкциям не подлежат переводу. **Примечание:** В данном фрагменте HTML нет текста для перевода на русский язык. Все содержимое состоит из: - HTML тегов и атрибутов (не подлежат переводу) - Названий заголовочных файлов C++ внутри тегов ` ` (не подлежат переводу согласно правилам) - Атрибутов ссылок (также не подлежат переводу) Если бы в коде присутствовал обычный текст вне указанных ограничений, он был бы переведен на русский язык с сохранением исходного форматирования. **Примечание:** В данном HTML-фрагменте отсутствует текст для перевода - все содержимое состоит из HTML-тегов, атрибутов и названий заголовочных файлов C++ внутри тегов ` `, которые согласно инструкциям не подлежат переводу. **Примечание:** В данном фрагменте HTML нет текста для перевода - все содержимое состоит из HTML-тегов, атрибутов и названий заголовочных файлов C++ (` `, ` `), которые согласно инструкциям не подлежат переводу. **Примечание:** В данном HTML-фрагменте все содержимое находится внутри тегов ` ` (которые эквивалентны ` `), поэтому согласно вашим инструкциям никакой текст не был переведен. Все заголовки C++ стандартных библиотек и HTML-разметка сохранены в оригинальном виде. **Примечание:** В данном фрагменте HTML-кода весь текст, подлежащий переводу, уже находится внутри тегов ` ` (` ` является устаревшим аналогом ` `), поэтому согласно инструкциям перевод не выполняется. Все заголовки C++ стандартной библиотеки (` `, ` `, ` `, ` `, ` `) и HTML-разметка сохранены без изменений. **Примечание:** В данном фрагменте HTML отсутствует переводимый текст - все содержимое состоит из HTML-тегов, атрибутов и названия заголовочного файла C++ ` `, который согласно инструкциям не подлежит переводу. **Примечание:** В данном фрагменте HTML нет текста для перевода на русский язык. Все содержимое состоит из: - HTML тегов и атрибутов (которые не подлежат переводу) - Названий заголовочных файлов C++ внутри тегов ` ` (которые являются C++ специфичными терминами и не переводятся) - Пустых ячеек таблицы Если бы в тексте присутствовали описательные элементы на английском (например, в атрибуте title или между тегами), они были бы переведены на русский с сохранением всех указанных требований. **Примечание:** В данном фрагменте HTML-кода отсутствует текст для перевода на русский язык. Все содержимое состоит из: - HTML тегов и атрибутов (которые не подлежат переводу) - Названий заголовочных файлов C++ внутри тегов ` ` (которые являются C++ специфичными терминами и не переводятся) - Атрибутов `title` с техническими путями (которые также не подлежат переводу) Структура таблицы и все технические элементы сохранены в оригинальном виде в соответствии с требованиями. **Примечание:** В данном HTML-фрагменте отсутствует текст для перевода - все содержимое состоит из HTML-тегов, атрибутов и названий заголовочных файлов C++ (внутри тегов ` `), которые согласно инструкциям не подлежат переводу. **Примечание:** В данном HTML-фрагменте не содержится переводимого текста - все элементы внутри тегов ` ` являются названиями заголовочных файлов C++, которые не подлежат переводу согласно требованиям. HTML-теги и атрибуты также сохранены в оригинальном виде. **Примечание:** В данном фрагменте HTML нет текста для перевода на русский язык. Все содержимое состоит из: - HTML тегов и атрибутов (не подлежат переводу) - Названий заголовочных файлов C++ внутри тегов ` ` (не подлежат переводу согласно правилам) - Атрибутов `title` содержат технические термины C++ (не подлежат переводу) Структура таблицы полностью сохранена в оригинальном формате. **Примечание:** В данном HTML-фрагменте весь текст находится внутри тегов ` ` (которые являются частью тегов ` `), поэтому согласно инструкциям перевода не требуется. Все C++ специфичные термины (названия заголовочных файлов) и HTML-разметка сохранены в оригинальном виде.
Заголовки библиотек C++
<algorithm> <iomanip> <list> <ostream> <streambuf>
<bitset> <ios> <locale> <queue> <string>
<complex> <iosfwd> <map> <set> <typeinfo>
<deque> <iostream> <memory> <sstream> <utility>
<exception> <istream> <new> <stack> <valarray>
<fstream> <iterator> <numeric> <stdexcept> <vector>
<functional> <limits>
Заголовки, добавленные в C++11
<array> <condition_variable> <mutex> <scoped_allocator> <type_traits>
<atomic> <forward_list> <random> <system_error> <typeindex>
<chrono> <future> <ratio> <thread> <unordered_map>
<codecvt> <initializer_list> <regex> <tuple> <unordered_set>
Заголовки, добавленные в C++14
<shared_mutex>
Заголовки, добавленные в C++17
<any> <execution> <memory_resource> <string_view> <variant>
<charconv> <filesystem> <optional>
Заголовки, добавленные в C++20
<barrier> <concepts> <latch> <semaphore> <stop_token>
<bit> <coroutine> <numbers> <source_location> <syncstream>
<compare> <format> <ranges> <span> <version>
Заголовки, добавленные в C++23
<expected> <flat_set> <mdspan> <spanstream> <stdfloat>
<flat_map> <generator> <print> <stacktrace>
Заголовки, добавленные в C++26
<contracts> <hazard_pointer> <inplace_vector> <rcu> <text_encoding>
<debugging> <hive> <linalg> <simd>
Удалённые заголовки
<codecvt> (начиная с C++11) (устарело в C++17) (удалено в C++26)
<strstream> (устарело в C++98) (удалено в C++26)
Заголовки C++ для средств библиотеки C
<cassert> <clocale> <cstdarg> <cstring>
<cctype> <cmath> <cstddef> <ctime>
<cerrno> <csetjmp> <cstdio> <cwchar>
<cfloat> <csignal> <cstdlib> <cwctype>
<climits>
Заголовки, добавленные в C++11
<cfenv> <cinttypes> <cstdint> <cuchar>
Удалённые заголовки
<ccomplex> (начиная с C++11) (устарел в C++17) (удалён в C++20)
<ciso646> (удалён в C++20)
<cstdalign> (начиная с C++11) (устарел в C++17) (удалён в C++20)
<cstdbool> (начиная с C++11) (устарел в C++17) (удалён в C++20)
<ctgmath> (начиная с C++11) (устарел в C++17) (удалён в C++20)

Автономная реализация имеет определяемый реализацией набор заголовков, смотрите здесь минимальные требования к набору заголовков.

Стандартная библиотека C

Стандартная библиотека C++ также предоставляет возможности стандартной библиотеки C, соответствующим образом адаптированные для обеспечения статической типобезопасности. Описания многих библиотечных функций опираются на стандартную библиотеку C для семантики этих функций.

В некоторых случаях сигнатуры, указанные в стандарте C++, могут отличаться от сигнатур в стандартной библиотеке C, и могут быть объявлены дополнительные перегрузки, но поведение и предусловия (включая те, что подразумеваются C-шным restrict ) (since C++17) остаются одинаковыми, если не указано иное.

Для совместимости со стандартной библиотекой C, стандартная библиотека C++ предоставляет перечисленные ниже заголовки C. Предназначение этих заголовков — только обеспечение взаимодействия. Возможно, что исходные файлы C++ должны включать один из этих заголовков, чтобы быть валидными ISO C. Исходные файлы, которые не предназначены для одновременной валидности как ISO C, не должны использовать какие-либо заголовки C. Смотрите здесь описания.

Заголовки C
<assert.h> <limits.h> <stdarg.h> <string.h>
<ctype.h> <locale.h> <stddef.h> <time.h>
<errno.h> <math.h> <stdio.h> <wchar.h>
<float.h> <setjmp.h> <stdlib.h> <wctype.h>
<iso646.h> <signal.h>
Заголовки, добавленные в C++11
<complex.h> <inttypes.h> <stdbool.h> <tgmath.h>
<fenv.h> <stdalign.h> <stdint.h> <uchar.h>
Заголовки, добавленные в C++23
<stdatomic.h>
Заголовки, добавленные в C++26
<stdbit.h> <stdchkint.h>

Если не указано иное, содержимое каждого заголовка c xxx совпадает с содержимым соответствующего заголовка xxx .h как указано в стандартной библиотеке C . Однако в стандартной библиотеке C++ объявления (за исключением имён, определённых как макросы в C) находятся в области видимости пространства имён std . Не указано, объявляются ли эти имена (включая любые добавленные перегрузки) сначала в глобальной области видимости пространства имён, а затем внедряются в пространство имён std с помощью явных using-объявлений .

Имена, которые определены как макросы в C ( assert , offsetof , setjmp , va_arg , va_end и va_start ), должны быть определены как макросы в стандартной библиотеке C++, даже если C разрешает их реализацию в виде функций.

Имена, которые определены как функции в C, должны быть определены как функции в стандартной библиотеке C++. Это запрещает практику, разрешенную в C, предоставления маскирующего макроса в дополнение к прототипу функции. Единственный способ достичь эквивалентного инлайн-поведения в C++ — предоставить определение как extern inline function .

Идентификаторы, которые являются ключевыми словами или операторами в C++, не могут быть определены как макросы в заголовках стандартной библиотеки C++. В частности, включение стандартного заголовка <iso646.h> не имеет никакого эффекта.

Имена, связанные с безопасными функциями в стандартной C (начиная с C++17)

Если включен любой заголовок C++, определяется реализацией, объявляется ли любое из следующих имен стандарта C Приложения K в глобальном пространстве имен (ни одно из них не объявляется в пространстве имен std ):

Имена из Приложения K стандарта C
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
gets_s sscanf_s vprintf_s wmemcpy_s
gmtime_s mbstowcs_s vscanf_s vswscanf_s
abort_handler_s strcat_s vsnprintf_s wmemmove
ignore_handler_s strcpy_s vsnwprintf_s wprintf_s
localtime_s strerrorlen_s vsprintf_s wscanf_s
L_tmpnam_s strerror_s vsscanf_s
mbsrtowcs_s strlen_s vswprintf_s

Использование библиотеки

Подключение заголовочных файлов

Сущности в стандартной библиотеке C++ определены в заголовочных файлах, содержимое которых становится доступным единице трансляции при наличии соответствующей #include директивы препроцессора.

Единица трансляции может включать заголовки библиотек в любом порядке. Каждый может быть включен более одного раза, без какого-либо отличия от включения ровно один раз, за исключением того, что эффект включения либо <cassert> либо <assert.h> каждый раз зависит от лексически текущего определения NDEBUG .

Единица трансляции может включать заголовок только вне любого объявления или определения и лексически до первой ссылки в этой единице трансляции на любую из сущностей, объявленных в этом заголовке. Диагностика не требуется.

В модульных единицах , заголовки могут быть включены только в глобальных фрагментах модуля .

(since C++20)

Импорт заголовков

Заголовки библиотеки C++ , или, для автономной реализации, подмножество таких заголовков, предоставляемых реализацией, в совокупности известны как импортируемые заголовки библиотеки C++ .

Содержимое импортируемых заголовков библиотеки C++ становится доступным единице трансляции, когда она содержит соответствующее объявление импорта .

(since C++20)

Импорт модулей

Стандартная библиотека C++ предоставляет следующие модули библиотеки C++ :

  • Именованный модуль std экспортирует объявления в пространстве имен std , предоставляемые импортируемыми заголовками библиотеки C++ (например, std::rotr из <bit> ) и заголовками C++ для средств библиотеки C (например, std::puts из <cstdio> ). Он дополнительно экспортирует объявления в глобальном пространстве имен для функций выделения и освобождения памяти, предоставляемых <new> (например, ::operator new ).
  • Именованный модуль std. compat экспортирует те же объявления, что и именованный модуль std , и дополнительно экспортирует объявления в глобальном пространстве имен, соответствующие объявлениям в пространстве имен std , предоставляемым заголовками C++ для средств библиотеки C (например, ::fclose ).

Для каждого объявления в стандартной библиотеке,

  • модуль, к которому оно прикреплено , не указан, и
  • оно обозначает одну и ту же сущность независимо от того, стало ли оно доступным через включение заголовка, импорт единицы заголовка или импорт модуля библиотеки C++.
(since C++23)

Связывание

Сущности в стандартной библиотеке C++ имеют продолжительность хранения#внешняя связь . Если не указано иное, объекты и функции имеют связь по умолчанию extern "C++" linkage .

Является ли имя из стандартной библиотеки C, объявленное с внешней линковкой, имеющим линковку extern "C" или extern "C++" — определяется реализацией. Стандарт C++ рекомендует использовать extern "C++" в данном случае.

Объекты и функции, определенные в библиотеке и требуемые программой на C++, включаются в программу до запуска программы.

Требования к реализациям стандартной библиотеки

Гарантии

Заголовок C++ должен предоставлять объявления и определения , которые присутствуют в

  • аннотацию этого заголовка, или
  • аннотацию другого заголовка, который, по-видимому, включен в аннотацию этого заголовка.

Для типов и макросов, определённых в нескольких заголовочных файлах (таких как NULL ), включение любого количества этих заголовков в любом порядке никогда не нарушает правило одного определения .

Если не указано иное, все объектоподобные макросы определённые стандартной библиотекой C, которые раскрываются в целочисленные константные выражения могут использоваться в #if директивах препроцессора.

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

Сигнатуры нечленных функций никогда не объявляются с дополнительными аргументами по умолчанию .

Если не указано иное, вызовы, выполняемые функциями в стандартной библиотеке к не-операторным, не-членам функциям, не используют функции из другого namespace , которые обнаруживаются через argument-dependent name lookup .

Для каждого объявления friend функции (шаблона) внутри определения класса (шаблона) не предоставляется никакого другого объявления для этой функции (шаблона).

Сигнатуры функций стандартной библиотеки могут быть объявлены как constexpr только если они должны быть constexpr (libstdc++ cmath здесь особенно не соответствует стандарту ). Если заголовок предоставляет любые неопределяющие объявления constexpr функций или конструкторов, соответствующие определения также должны быть предоставлены в этом заголовке.

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

  • Функция стандартной библиотеки C++ не может (прямо или косвенно) обращаться к объектам, доступным потокам, отличным от текущего потока, если только эти объекты не доступны (прямо или косвенно) через аргументы функции, включая this .
  • Функция стандартной библиотеки C++ не может (прямо или косвенно) изменять объекты, доступные потокам, отличным от текущего потока, если только эти объекты не доступны (прямо или косвенно) через неконстантные аргументы функции, включая this .
    • Например, объект со статической продолжительностью хранения не может использоваться для внутренних целей без синхронизации, поскольку это может вызвать гонку данных даже в программах, которые не разделяют объекты между потоками явно.
  • Функция стандартной библиотеки C++ не может обращаться к объектам, косвенно доступным через её аргументы или через элементы её контейнерных аргументов, кроме как путём вызова функций, требуемых её спецификацией для этих элементов контейнера.
  • Операция над итераторами , полученными вызовом функции-члена контейнера или строки стандартной библиотеки, может обращаться, но не изменять базовый контейнер.
    • В частности, операции с контейнерами, которые инвалидируют итераторы, конфликтуют с операциями над итераторами, связанными с этим контейнером.
  • Функция стандартной библиотеки C++ может выполнять все операции исключительно в текущем потоке только если эти операции имеют эффекты, видимые пользователям.
    • Операции без видимых побочных эффектов могут быть распараллелены.
(начиная с C++11)

Для каждого класса, определённого в стандартной библиотеке C++, который должен быть производным от другого класса, определённого в стандартной библиотеке C++,

  • базовый класс должен быть виртуальным если он указан как virtual ,
  • базовый класс не может быть виртуальным если он не указан как virtual , и
  • если не указано иное, типы с различными именами должны быть различными типами.

Если не указано иное, все типы, указанные в стандартной библиотеке C++, являются не- final типами.

(since C++11)

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

Функции из стандартной библиотеки C могут генерировать исключения только тогда, когда такая функция вызывает предоставленную программой функцию, которая генерирует исключение ( qsort() и bsearch() соответствуют этому условию).

Операции деструкторов, определенные в стандартной библиотеке C++, никогда не генерируют исключения. Каждый деструктор в стандартной библиотеке C++ ведет себя так, как если бы он имел спецификацию исключений без генерации .

Если функция в стандартной библиотеке C++ сообщает об ошибках через объект std::error_code , то член category() этого объекта должен возвращать std::system_category() для ошибок, происходящих из операционной системы, или ссылку на определяемую реализацией std::error_category для ошибок из других источников. Возможные значения value() для каждой из этих категорий ошибок должны быть определены.

Объекты типов, определенных в стандартной библиотеке C++, могут быть перемещены . Операции перемещения могут быть явно указаны или неявно сгенерированы. Если не указано иное, такие объекты после перемещения будут находиться в допустимом, но неопределенном состоянии.

Объект типа, определенного в стандартной библиотеке C++, может быть перемещён присваиванием в себя. Если не указано иное, такое присваивание переводит объект в допустимое, но неопределенное состояние.

(начиная с C++11)

Свобода реализации

Не указано, определены ли какие-либо функции-члены или не-члены в стандартной библиотеке C++ как inline .

Для не- виртуальной функции-члена стандартной библиотеки C++ может быть объявлен другой набор сигнатур функций-членов при условии, что любой вызов этой функции-члена, который выбрал бы перегрузку из данного набора объявлений, ведёт себя так, как если бы была выбрана эта перегрузка. Это позволяет, например:

  • добавление параметров со значениями по умолчанию,
  • замена функции-члена с аргументами по умолчанию двумя или более функциями-членами с эквивалентным поведением, или
  • добавление дополнительных сигнатур для имени функции-члена.

Если не указано иное, определяется реализацией, какие функции в стандартной библиотеке C++ могут быть рекурсивно повторно входимыми.

Реализации стандартной библиотеки C++ могут совместно использовать свои внутренние объекты между потоками, если эти объекты не видны пользователям и защищены от состояний гонки данных.

(since C++11)

Не указано, является ли любая сигнатура функции или класс в стандартной библиотеке C++ дружественной для другого класса в стандартной библиотеке C++.

Имена и сигнатуры глобальных функций, описанные здесь , зарезервированы для реализации.

Любой класс в стандартной библиотеке C++ может быть унаследован от класса с именем, зарезервированным для реализации. Если класс, определённый в стандартной библиотеке C++, должен быть унаследован от других классов стандартной библиотеки C++, этот класс может быть унаследован напрямую от требуемого базового класса или косвенно через иерархию базовых классов с именами, зарезервированными для реализации.

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

Спецификация исключений для невиртуальной функции может быть усилена добавлением небросающей спецификации исключений.

Усиление стандартной библиотеки

Реализация может быть усиленной реализацией  , является ли реализация усиленной — определяется реализацией.

Некоторые функции-члены стандартной библиотеки (и шаблоны функций-членов) имеют усиленные предусловия . При вызове такой функции:

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

Функции-члены с усиленными предусловиями

**Примечания к переводу:** - HTML-теги и атрибуты сохранены без изменений - Текст внутри тегов ` `, `
`, `` не переведен
- C++ специфические термины (`operator*`) сохранены в оригинале
- Основной заголовок "Element access" переведен как "Доступ к элементам" с сохранением оригинала для ясности
- Сохранено оригинальное форматирование и структура таблицы
**Примечание:** В данном фрагменте HTML нет текста для перевода на русский язык, так как: - Все содержимое внутри тегов ` ` и ` ` сохранено без изменений (C++ оператор `operator->`) - HTML теги и атрибуты сохранены в оригинальном виде - В таблице отсутствует текстовый контент для перевода **Примечание:** В данном HTML-фрагменте весь текст, который требовал перевода, уже находится внутри тегов ` `, ` ` или является частью атрибутов `title` и `href`, которые согласно инструкциям не подлежат переводу. Поэтому перевод не требуется, и исходный код остается без изменений. **Примечание:** В данном HTML-фрагменте весь текст, подлежащий переводу, состоит исключительно из C++ термина `front`, который согласно инструкциям не должен переводиться. Все остальные элементы являются HTML-тегами, атрибутами или текстом внутри ` ` и ` ` тегов, которые также не подлежат переводу. **Примечание:** В данном HTML-коде весь текст "back" находится внутри тегов ` `, ` ` или является частью атрибутов title, поэтому согласно инструкциям он не был переведен. Все HTML-теги, атрибуты и форматирование сохранены в оригинальном виде. **Объяснение перевода:** - Все HTML теги и атрибуты сохранены без изменений - Текст внутри тегов ` ` и ` ` не переведен, так как это C++ специфический термин - Форматирование и структура таблицы полностью сохранены - Ссылка и ее атрибуты остались неизменными - Пустые ячейки таблицы сохранены в оригинальном виде **Примечание:** В данном HTML-фрагменте отсутствует текст для перевода на русский язык. Все содержимое состоит из: - HTML-тегов и атрибутов (не подлежат переводу) - Текста внутри тегов ` ` и ` ` (термин `pop_back` - C++ специфический, не переводится) - Пустых ячеек таблицы Следовательно, перевод не требуется, исходный код остается без изменений.
Категория Последовательные контейнеры Представления контейнеров Строковые классы (представления) Общие утилиты
Числовые массивы
Класс array vector inplace_vector deque list forward_list span mdspan basic_string basic_string_view bitset optional expected valarray
(конструктор) span mdspan
Доступ к элементам
Element access
operator* operator* operator*
operator-> operator-> operator->
operator[] operator[] operator[] operator[] operator[] operator[] operator[] operator[] operator[] operator[] operator[]
front front front front front front front front front front
back back back back back back back back back
error error
Подпредставления first first
last last
subspan subspan
Модификаторы pop_front pop_front pop_front pop_front
pop_back pop_back pop_back pop_back pop_back pop_back
remove_prefix remove_prefix
remove_suffix remove_suffix
(начиная с C++26)

Примечания

libstdc++ , libc++ и STL поддерживают использование модулей стандартной библиотеки в режиме C++20.

Макрос тестирования возможностей Значение Стандарт Функция
__cpp_lib_modules 202207L (C++23) Модули стандартной библиотеки std и std. compat
Только защищённая реализация
__cpp_lib_hardened_array 202502L (C++26) Защищённый std::array
__cpp_lib_hardened_basic_string 202502L (C++26) Защищённая std::basic_string
__cpp_lib_hardened_basic_string_view 202502L (C++26) Защищённый std::basic_string_view
__cpp_lib_hardened_bitset 202502L (C++26) Защищённый std::bitset
__cpp_lib_hardened_deque 202502L (C++26) Защищённая std::deque
__cpp_lib_hardened_expected 202502L (C++26) Защищённый std::expected
__cpp_lib_hardened_forward_list 202502L (C++26) Защищённый std::forward_list
__cpp_lib_hardened_inplace_vector 202502L (C++26) Защищённый std::inplace_vector
__cpp_lib_hardened_list 202502L (C++26) Защищённый std::list
__cpp_lib_hardened_mdspan 202502L (C++26) Защищённый std::mdspan
__cpp_lib_hardened_optional 202502L (C++26) Защищённый std::optional
__cpp_lib_hardened_span 202502L (C++26) Защищённый std::span
__cpp_lib_hardened_valarray 202502L (C++26) Защищённый std::valarray
__cpp_lib_hardened_vector 202502L (C++26) Защищённый std::vector

Отчёты о дефектах

Следующие отчеты о дефектах, изменяющих поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 1 C++98 языковые связи имен из
стандартной библиотеки C не были указаны
они являются
определяемыми реализацией
LWG 119 C++98 спецификации исключений виртуальных
функций могли быть усилены
разрешено только для
невиртуальных функций
LWG 147 C++98 спецификация для нечленных
функций рассматривала только глобальные функции
также рассматривает
негалобальные функции
LWG 225 C++98 функции стандартной библиотеки могли вызывать нечленные функции
из других пространств имен из-за поиска, зависимого от аргументов
запрещено, если не
указано иное
LWG 336 C++98 <strstream> не был заголовком библиотеки C++ это заголовок библиотеки C++
LWG 343 C++98 зависимости заголовков библиотеки не были указаны указаны (перечислены в синопсисах)
LWG 456 C++98 заголовки C++ для средств библиотеки C могли
предоставлять определения только в пространстве имен std
разрешено определять в глобальном пространстве имен
и затем инжектировать в пространство имен std
LWG 465 C++98 идентификаторы, которые являются ключевыми словами или операторами в C++, могли
быть определены как макросы в заголовках стандартной библиотеки C++
(только <ciso646> требуется не определять их как макросы)
все заголовки стандартной
библиотеки C++ не могут
определять их как макросы
LWG 1178 C++98 заголовки C++ должны включать заголовок C++
содержащий любое необходимое определение
заголовки C++ должны предоставлять объявления
и определения, которые прямо или
косвенно включены в его синопсис
LWG 2013 C++11 не было указано, могут ли функции, не
требуемые стандартом быть constexpr,
быть объявлены constexpr стандартной библиотекой
запрещено
LWG 2225 C++98 требовалась диагностика, если заголовок
включается в неправильной позиции
диагностика не
требуется в этом случае