C++ named requirements: CharTraits
CharTraits — это класс характеристик, который абстрагирует базовые операции с символами и строками для заданного типа символов. Большинство строковых классов и классов ввода/вывода стандартной библиотеки требуют параметр шаблона CharTraits вместе с соответствующим параметром шаблона типа символа.
Содержание |
Требования
Ни одна из перечисленных ниже операций над CharTraits не должна вызывать исключений.
Дано
-
CharT, тип символа -
X, CharTraits тип для типаCharT -
c
,
d
, значения типа
CharT - p , q , значения типа const CharT *
-
s
, значение типа
CharT* - n , i , j , значения типа std::size_t
-
e
,
f
, значения типа
X::int_type -
pos
, значение типа
X::pos_type -
state
, значение типа
X::state_type -
r
, l-value типа
CharT
Типы
| Тип | Семантика |
|---|---|
X::char_type
|
CharT
|
X::int_type
|
Тип, который может содержать все допустимые значения
X::char_type
плюс
X
::
eof
(
)
|
X::off_type
|
Вызывает поведение, определяемое реализацией, если не
std::streamoff
когда
X
используется как параметр шаблона traits в классах ввода/вывода.
|
X::pos_type
|
|
X::state_type
|
Destructible , CopyAssignable , CopyConstructible , DefaultConstructible |
Выражения
| Выражение | Тип возвращаемого значения | Семантика | Сложность |
|---|---|---|---|
| X :: eq ( c, d ) | bool | Возвращает: следует ли рассматривать c как равный d | Константная |
| X :: lt ( c, d ) | bool | Возвращает: следует ли рассматривать c как меньший, чем d | Константная |
| X :: compare ( p, q, n ) | int |
Возвращает:
|
Линейная |
| X :: length ( p ) | std::size_t | Возвращает: наименьшее i такое, что X :: eq ( p [ i ] , CharT ( ) ) равно true | Линейная |
| X :: find ( p, n, c ) | const X :: char_type * |
Возвращает:
|
Линейная |
| X :: move ( s, p, n ) |
X::char_type*
|
|
Линейная |
| X :: copy ( s, p, n ) |
X::char_type*
|
|
Линейная |
| X :: assign ( r, d ) | (Не используется) | Присваивает r = d | Константная |
| X :: assign ( s, n, c ) |
X::char_type*
|
|
Линейная |
| X :: not_eof ( e ) |
X::int_type
|
Возвращает:
|
Константная |
| X :: to_char_type ( e ) |
X::char_type
|
Возвращает:
|
Константная |
| X :: to_int_type ( c ) |
X::int_type
|
Возвращает: некоторое значение
e
, ограниченное определениями
X::to_char_type
и
X::eq_int_type
|
Константная |
| X :: eq_int_type ( e, f ) | bool |
|
Константная |
| X :: eof ( ) |
X::int_type
|
Возвращает: значение e такое, что X :: eq_int_type ( e, X :: to_int_type ( c ) ) равно false для всех значений c | Константа |
Стандартная библиотека
CharTraits требуется следующими шаблонами классов стандартной библиотеки в качестве параметра шаблонного типа:
Строки |
|
|
хранит и манипулирует последовательностями символов
(шаблон класса) |
|
|
(C++17)
|
представление строки только для чтения
(шаблон класса) |
Потоки |
|
|
управляет произвольным буфером потока
(шаблон класса) |
|
|
оборачивает заданное абстрактное устройство (
std::basic_streambuf
)
и предоставляет высокоуровневый интерфейс ввода (шаблон класса) |
|
|
реализует операции высокоуровневого ввода файлового потока
(шаблон класса) |
|
|
реализует операции высокоуровневого ввода строкового потока
(шаблон класса) |
|
|
(C++23)
|
реализует операции ввода из фиксированного буфера символов
(шаблон класса) |
|
оборачивает заданное абстрактное устройство (
std::basic_streambuf
)
и предоставляет высокоуровневый интерфейс вывода (шаблон класса) |
|
|
реализует операции высокоуровневого вывода в файловый поток
(шаблон класса) |
|
|
реализует операции высокоуровневого вывода в строковый поток
(шаблон класса) |
|
|
(C++20)
|
обёртка синхронизированного выходного потока
(шаблон класса) |
|
(C++23)
|
реализует операции вывода в фиксированный буфер символов
(шаблон класса) |
|
оборачивает заданное абстрактное устройство (
std::basic_streambuf
)
и предоставляет высокоуровневый интерфейс ввода/вывода (шаблон класса) |
|
|
реализует высокоуровневые операции ввода/вывода файлового потока
(шаблон класса) |
|
|
реализует высокоуровневые операции ввода/вывода для строковых потоков
(шаблон класса) |
|
|
(C++23)
|
реализует операции ввода/вывода для фиксированного буфера символов
(шаблон класса) |
Итераторы потоков |
|
|
входной итератор, который читает из
std::basic_istream
(шаблон класса) |
|
|
выходной итератор, который записывает в
std::basic_ostream
(шаблон класса) |
|
Буферы потоков |
|
|
абстрагирует базовое устройство
(шаблон класса) |
|
|
реализует базовое файловое устройство
(шаблон класса) |
|
|
реализует необработанное строковое устройство
(шаблон класса) |
|
|
(C++20)
|
обёртка синхронизированного устройства вывода
(шаблон класса) |
|
(C++23)
|
реализует устройство необработанного фиксированного буфера символов
(шаблон класса) |
Итераторы потоковых буферов |
|
|
входной итератор, который читает из
std::basic_streambuf
(шаблон класса) |
|
|
выходной итератор, записывающий в
std::basic_streambuf
(шаблон класса) |
|
CharTraits
удовлетворяется следующими стандартными библиотечными явными специализациями
std::char_traits
:
|
template
<>
class
char_traits
<
char
>
;
template
<>
class
char_traits
<
wchar_t
>
;
|
(начиная с C++20) (начиная с C++11) (начиная с C++11) |
|
Отчёты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены задним числом к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 335 | C++98 |
требования к бинарной перегрузке
assign
не предотвращали присваивания rvalue
|
её первый аргумент
может быть только lvalue |
| LWG 352 | C++98 |
X::state_type
требовался только
быть CopyConstructible |
также требуется быть
CopyAssignable и DefaultConstructible |
| LWG 3085 | C++98 |
X
::
copy
(
s, p, n
)
требовал только
p
не
в
[
s
,
s
+
n
)
, что слишком слабо
[1]
|
требует
[
p
,
p
+
n
)
и
[
s
,
s
+
n
)
не перекрывались
|
-
↑
[p,p + n)и[s,s + n)могут перекрываться, использование std::memcpy для реализацииX::copyв этом случае приводит к неопределенному поведению.