Подпункты Требования могут описывать имена, которые используются для определения ограничений для аргументов шаблона.160 Эти имена используются в разделах библиотеки для описания типов, которые могут быть предоставлены в качестве аргументов программой C ++ при создании экземпляров компонентов шаблона из библиотеки.
Некоторые типы, определенные в разделе[input.output] , используются для описания типов, определяемых реализацией. Они основаны на других типах, но с дополнительными ограничениями.
Примеры из[utility.requirements] включают в себя: EqualityComparable, LessThanComparable, CopyConstructible. Примеры[iterator.requirements] включают: InputIterator, ForwardIterator.
Несколько типов , определенных в пунктах[language.support] через[thread] и Приложение[depr] , которые используются в качестве параметров функции или возврата типов определяются для целей изложения только для того , чтобы захватить их языковую связь. За объявлениями таких типов следует комментарий, оканчивающийся наexposition only. [ Example:
namespace std { extern "C" using some-handler = int(int, void*, double); // exposition only }
Заполнитель типаsome-handler теперь можно использовать для указания функции, которая принимает параметр обратного вызова с привязкой к языку C. ] — end example
Существует несколько типов , определенных в пункте[input.output] являются enumerated types. Каждый перечислимый тип может быть реализован как перечисление или как синоним перечисления.161
Перечислимый типenumerated можно записать:
enum enumerated { \textit{V}0, \textit{V}1, \textit{V}2, \textit{V}3, ..... }; inline const \textit{enumerated C}0(\textit{V}0); inline const \textit{enumerated C}1(\textit{V}1); inline const \textit{enumerated C}2(\textit{V}2); inline const \textit{enumerated C}3(\textit{V}3); .....
Здесь имена\textit{C}0, \textit{C}1и т.д. , представляют enumerated elements для этого конкретного перечислимого типа. Все такие элементы имеют разные значения.
Например, целочисленный тип с постоянными целочисленными значениями ([basic.fundamental]).
Несколько типов , определенных в пунктах[language.support] через[thread] и Дополнением[depr] являются bitmask types. Каждый тип битовой маски может быть реализован как перечислимый тип, который перегружает определенные операторы, как целочисленный тип или как bitset.
Тип битовой маскиbitmask можно записать:
// For exposition only. // int_type is an integral type capable of representing all values of the bitmask type. enum bitmask : int_type { \textit{V}0 = 1 << 0, \textit{V}1 = 1 << 1, \textit{V}2 = 1 << 2, \textit{V}3 = 1 << 3, ..... }; inline constexpr \textit{bitmask C}0(\textit{V}0); inline constexpr \textit{bitmask C}1(\textit{V}1); inline constexpr \textit{bitmask C}2(\textit{V}2); inline constexpr \textit{bitmask C}3(\textit{V}3); ..... constexpr bitmask operator&(bitmask X, bitmask Y) { return static_cast<bitmask>( static_cast<int_type>(X) & static_cast<int_type>(Y)); } constexpr bitmask operator|(bitmask X, bitmask Y) { return static_cast<bitmask>( static_cast<int_type>(X) | static_cast<int_type>(Y)); } constexpr bitmask operator^(bitmask X, bitmask Y){ return static_cast<bitmask>( static_cast<int_type>(X) ^ static_cast<int_type>(Y)); } constexpr bitmask operator~(bitmask X){ return static_cast<bitmask>(~static_cast<int_type>(X)); } bitmask& operator&=(bitmask& X, bitmask Y){ X = X & Y; return X; } bitmask& operator|=(bitmask& X, bitmask Y) { X = X | Y; return X; } bitmask& operator^=(bitmask& X, bitmask Y) { X = X ^ Y; return X; }
Здесь имена\textit{C}0, \textit{C}1и т.д. , представляют bitmask elements для этого конкретного типа Bitmask. Все такие элементы имеют различные ненулевые значения, такие что для любой пары\textit{C}i и\textit{C}j гдеi≠j,Ci & Ci отличен от нуля и Ci & Cj равен нулю. Кроме того, значение0 используется для представления объектаempty bitmask, в котором не установлены элементы битовой маски.
Следующие термины применяются к объектам и значениям типов битовых масок:
Чтобы set получить значениеY в объектеX , нужно оценить выражениеX|=Y.
Чтобы clear получить значениеY в объекте X , нужно оценить выражениеX&= ~Y.
ЗначениеY is set в объекте, X если выражение неX&Y равно нулю.
Стандартная библиотека C широко использует символы и последовательности символов, которые следуют нескольким единым соглашениям:
A letter - это любая из 26 строчных или 26 прописных букв в базовом наборе символов выполнения.
Это decimal-point character (однобайтовый) символ, используемый функциями, которые преобразуют (однобайтовую) последовательность символов в значение одного из типов с плавающей запятой. Он используется в последовательности символов для обозначения начала дробной части. Оно представлено в пунктах[language.support] через[thread] и Приложении[depr] периодом, '.', который также его значение в"C" местности, но может изменяться во время выполнения программы с помощью вызова setlocale(int, const char*),162 или путем изменения к locale объекту, как это описано в пунктах[locales] и[input.output].
character sequence Является ,array objectA что может быть объявлено как T A[N], гдеT любой из типов char, unsigned charили signed char ([basic.fundamental]), необязательно квалифицирован по любой комбинации const или volatile. Начальные элементы массива имеют определенное содержимое вплоть до элемента, определенного некоторым предикатом. Последовательность символов может быть обозначена значением указателя S , указывающим на ее первый элемент.
A null-terminated byte stringили ntbs - это последовательность символов, элемент с самым высоким адресом и определенным содержимым которой имеет нулевое значение ( terminating null символ); ни один другой элемент в последовательности не имеет нулевого значения.163
length А. Н. НТБ является количество элементов , которые предшествуют завершающий нулевой символ. An НТБ имеет нулевую длину.empty
value А.Н. НТБ представляет собой последовательность значений элементов до и включая завершающий нулевой символ.
Многие из объектов, которыми манипулируют сигнатуры функций, объявленные в, <cstring> являются последовательностями символов или ntbs . Размер некоторых из этих последовательностей символов ограничен значением длины, которое поддерживается отдельно от последовательности символов.
Строковый литерал, например "abc", является статическим ntbs .
Anull-terminated multibyte string, или ntmbs , представляет собой ntbs, который составляет последовательность допустимых многобайтовых символов, начинающуюся и заканчивающуюся в начальном состоянии сдвига.165
An НТБ , который содержит только символы из базового набора символов исполнения также является ntmbs . В этом случае каждый многобайтовый символ состоит из одного байта.