20 Library introduction [library]

20.4 Method of description (Informative) [description]

20.4.1 Structure of each clause [structure]

20.4.1.1 Elements [structure.elements]

Каждое предложение библиотеки содержит следующие элементы, если применимо:155

  • Резюме

  • Требования

  • Подробные характеристики

  • Ссылки на стандартную библиотеку C

Для экономии места элементы, не относящиеся к пункту, опускаются. Например, если в разделе не указаны какие-либо требования, подпункта «Требования» не будет.

20.4.1.2 Summary [structure.summary]

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

Пункты, помеченные «Примечание (и):» или «Пример (ы):», являются информативными, остальные параграфы являются нормативными.

Краткое содержание и подробные спецификации включают:

  • макросы

  • ценности

  • типы

  • классы и шаблоны классов

  • функции и шаблоны функций

  • объекты

20.4.1.3 Requirements [structure.requirements]

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

  • Аргументы шаблона

  • Производные классы

  • Контейнеры, итераторы и алгоритмы, соответствующие соглашению об интерфейсе

Компоненты string и iostream используют явное представление операций, требуемых от аргументов шаблона. Они используют шаблон класса char_­traits для определения этих ограничений.

Требования соглашения об интерфейсе сформулированы как можно более широко. Вместо того , заявив , что «класс X должен определить функцию - член operator++()», интерфейс требует «для любого объекта x класса X, ++x определяется». То есть, является ли оператор членом, не указано.

Требования сформулированы в виде четко определенных выражений, которые определяют действительные термины типов, удовлетворяющих требованиям. Для каждого набора четко определенных требований к выражениям существует таблица, в которой указывается начальный набор допустимых выражений и их семантика. Любой общий алгоритм (пункт [algorithms]), который использует четко определенные требования к выражениям, описывается в терминах допустимых выражений для параметров его типа шаблона.

На требования к аргументам шаблона иногда ссылаются по имени. Смотрите [type.descriptions].

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

Хотя в некоторых случаях приведенный код однозначно является оптимальной реализацией.

20.4.1.4 Detailed specifications [structure.specifications]

Подробные спецификации содержат следующие элементы:

  • название и краткое описание

  • синопсис (определение класса или объявление функции, в зависимости от ситуации)

  • ограничения на аргументы шаблона, если таковые имеются

  • описание инвариантов классов

  • описание семантики функции

Описания функций-членов класса следуют в следующем порядке (при необходимости):157

  • конструктор (ы) и деструктор

  • функции копирования, перемещения и присвоения

  • функции сравнения

  • функции-модификаторы

  • функции наблюдателя

  • операторы и другие функции, не являющиеся членами

Описание семантики функции содержит следующие элементы (при необходимости):158

  • Requires: предварительные условия для вызова функции

  • Effects: действия, выполняемые функцией

  • Synchronization: операции синхронизации ([intro.multithread]), применимые к функции

  • Postconditions: наблюдаемые результаты, установленные функцией

  • Returns: описание значений, возвращаемых функцией

  • Throws: любые исключения, созданные функцией, и условия, которые могут вызвать исключение

  • Complexity: временная и / или пространственная сложность функции

  • Remarks: дополнительные семантические ограничения на функцию

  • Error conditions: условия ошибок для кодов ошибок, сообщаемых функцией

Каждый раз, когда Effects элемент указывает, что семантика некоторой функции F представляет собой Equivalent to некоторую кодовую последовательность, различные элементы интерпретируются следующим образом. Если Fсемантика определяет Requires элемент, то это требование логически налагается до equivalent-to семантики. Далее, семантика кодовой последовательности определяется Requires, Effects, Synchronization, Postconditions, Returns, Throws, Complexity, Remarks, и Error conditions указана для функциональных вызовов , содержащихся в кодовой последовательности. Значение, возвращаемое из F , определяется элементом F's Returns , или, если F не имеет Returns элемента,void невозврат из F задается return операторами в кодовой последовательности. Если Fсемантика содержит элемент Throws, Postconditionsили Complexity , то он заменяет любые вхождения этого элемента в кодовой последовательности.

Для незарезервированных функций замены и обработчика Clause [language.support] определяет два поведения для рассматриваемых функций: их обязательное поведение и поведение по умолчанию. default behavior Описывает определение функции , предоставляемой реализации. required behavior Описывает семантику определения функции , представленное либо реализации или программой C ++. Если в описании не делается явных различий, описанное поведение является обязательным.

Если формулировка требования сложности требует отрицательного числа операций, фактическое требование - нулевое количество операций.159

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

Условия ошибки определяют условия, при которых функция может выйти из строя. Условия перечислены вместе с подходящим объяснением как enum class errc константы ([syserr]).

Для экономии места элементы, не относящиеся к классу, опускаются. Например, если в классе не указаны какие-либо функции сравнения, подпункта «Функции сравнения» не будет.

Для экономии места элементы, не относящиеся к функции, опускаются. Например, если функция не определяет никаких дополнительных предварительных условий, Requires: абзаца не будет .

В некоторых случаях это упрощает представление требований к сложности.

20.4.1.5 C library [structure.see.also]

Пункты с пометкой « См. Также » содержат перекрестные ссылки на соответствующие части этого международного стандарта и стандарта ISO C.