Spec-Zone.ru › C++

C++ именованные требования: 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, lvalue типа CharT

Типы

Тип Семантика
X::char_type CharT
X::int_type Тип, который может содержать все допустимые значения X::char_type плюс X::eof()
X::off_type Вызывает поведение, определённое реализацией, если не std::streamoff при использовании X в качестве параметра шаблона свойств в классах ввода/вывода.
X::pos_type
  • Функции в классах ввода/вывода, возвращающие этот тип, используют X::pos_type(X::off_type(-1)) в качестве недопустимого значения для сигнализации об ошибке
  • Использование этого недопустимого значения в качестве аргумента любого из членов std::istream, std::ostream или std::streambuf, принимающих значение этого типа, является неопределённым поведением
  • Вызывает поведение, определённое реализацией, если этот тип не std::streampos при использовании X в качестве параметра шаблона свойств в классах ввода/вывода
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 Возвращает:
  • ​0​ если для каждого i в [​0​, n), X::eq(p[i], q[i]) равно true
  • Иначе, отрицательное значение, если
    • Для некоторого j в [​0​, n), X::lt(p[j], q[j]) меньше true и
    • Для каждого i в [​0​, j), X::eq(p[i], q[i]) равно true
  • Иначе, положительное значение
Линейная
X::length(p) std::size_t Возвращает: наименьшее i такое, что X::eq(p[i], CharT()) меньше true Линейная
X::find(p, n, c) const X::char_type* Возвращает:
  • Наименьшее q в [p, p + n) такое, что X::eq(*q, c) меньше true
  • ​0​ в противном случае
Линейная
X::move(s, p, n) X::char_type*
  • Для каждого i в [​0​, n), выполняет X::assign(s[i], p[i])
  • Копирует правильно даже в тех случаях, когда диапазоны [p, p + n) и [s, s + n) перекрываются
  • Возвращает: s
Линейная
X::copy(s, p, n) X::char_type*
  • Требуется: [p, p + n) и [s, s + n) не перекрываются
  • Возвращает: s
  • Для каждого i в [​0​, n), выполняет X::assign(s[i], p[i])
Линейная
X::assign(r, d) (Не используется) Присваивает r = d Постоянная
X::assign(s, n, c) X::char_type*
  • Для каждого i в [​0​, n), выполняет X::assign(s[i], c).
  • Возвращает: s
Линейная
X::not_eof(e) X::int_type Возвращает:
  • e если X::eq_int_type(e, X::eof()) равно false
  • Иначе значение f такое, что X::eq_int_type(f, X::eof()) равно false
Постоянная
X::to_char_type(e) X::char_type Возвращает:
  • Если для некоторого c, X::eq_int_type(e, X::to_int_type(c)) меньше true, c
  • Иначе некоторое неопределённое значение
Постоянная
X::to_int_type(c) X::int_type Возвращает: некоторое значение e, ограниченное определениями X::to_char_type и X::eq_int_type Постоянная
X::eq_int_type(e, f) bool
  • Для всех c и d, X::eq(c, d) равно X::eq_int_type(X::to_int_type(c), X::to_int_type(d))
  • Возвращает:
    • Возвращает X::eq(c, d) если для некоторых c и d, e == X::to_int_type(c) и f == X::to_int_type(d)
    • Иначе, возвращает true если e и f являются копиями X::eof()
    • Иначе, возвращает false если один из e и f является копией X::eof(), а другой нет
    • Иначе, значение неопределено
Постоянная
X::eof() X::int_type Возвращает: значение e такое, что X::eq_int_type(e, X::to_int_type(c)) равно false для всех значений c Постоянная

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

CharTraits требуется следующими шаблонными классами стандартной библиотеки в качестве параметра шаблона:

Строки
basic_string
хранит и обрабатывает последовательности символов
(шаблон класса)
basic_string_view
(C++17)
только для чтения представление строки
(шаблон класса)
Потоки
basic_ios
управляет произвольным буфером потока
(шаблон класса)
basic_istream
оборачивает заданное абстрактное устройство (std::basic_streambuf)
и предоставляет интерфейс ввода высокого уровня
(шаблон класса)
basic_ifstream
реализует операции ввода потока файла высокого уровня
(шаблон класса)
basic_istringstream
реализует операции ввода потока строки высокого уровня
(шаблон класса)
basic_ispanstream
(C++23)
реализует операции ввода буфера фиксированного размера символов
(шаблон класса)
basic_ostream
оборачивает заданное абстрактное устройство (std::basic_streambuf)
и предоставляет интерфейс вывода высокого уровня
(шаблон класса)
basic_ofstream
реализует операции вывода потока файла высокого уровня
(шаблон класса)
basic_ostringstream
реализует операции вывода потока строки высокого уровня
(шаблон класса)
basic_osyncstream
(C++20)
оболочка синхронизированного потока вывода
(шаблон класса)
basic_ospanstream
(C++23)
реализует операции вывода буфера фиксированного размера символов
(шаблон класса)
basic_iostream
оборачивает заданное абстрактное устройство (std::basic_streambuf)
и предоставляет интерфейс ввода/вывода высокого уровня
(шаблон класса)
basic_fstream
реализует операции ввода/вывода потока файла высокого уровня
(шаблон класса)
basic_stringstream
реализует операции ввода/вывода потока строки высокого уровня
(шаблон класса)
basic_spanstream
(C++23)
реализует операции ввода/вывода буфера фиксированного размера символов
(шаблон класса)
Итераторы потоков
istream_iterator
итератор ввода, читающий из std::basic_istream
(шаблон класса)
ostream_iterator
итератор вывода, записывающий в std::basic_ostream
(шаблон класса)
Буферы потоков
basic_streambuf
абстрагирует базовое устройство
(шаблон класса)
basic_filebuf
реализует базовое устройство файла
(шаблон класса)
basic_stringbuf
реализует базовое устройство строки
(шаблон класса)
basic_syncbuf
(C++20)
оболочка синхронизированного устройства вывода
(шаблон класса)
basic_spanbuf
(C++23)
реализует базовое устройство буфера фиксированного размера символов
(шаблон класса)
Итераторы буферов потоков
istreambuf_iterator
итератор ввода, читающий из std::basic_streambuf
(шаблон класса)
ostreambuf_iterator
итератор вывода, записывающий в std::basic_streambuf
(шаблон класса)


CharTraits удовлетворяется следующими явными специализациями стандартной библиотеки std::char_traits:

template<> class char_traits<char>;
template<> class char_traits<wchar_t>;
template<> class char_traits<char8_t>;
template<> class char_traits<char16_t>;
template<> class char_traits<char32_t>;


(с C++20)
(с C++11)
(с C++11)

Отчеты об ошибках

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

DR Применено к Поведение, как опубликовано Корректное поведение
LWG 335 C++98 требования к бинарному перегрузке
assign не предотвращали присваивание rvalues
его первый аргумент
может быть только 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) не перекрываться
  1. [p, p + n) и [s, s + n) могут перекрываться, используя std::memcpy для реализации X::copy приводит к неопределенному поведению в этом случае.

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/CharTraits

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API