std::basic_string_view
Определено в заголовочном файле <string_view>
|
||
template< class CharT, |
(начиная с C++17) | |
Шаблон класса basic_string_view
описывает объект, который может ссылаться на постоянную непрерывную последовательность CharT
с первым элементом последовательности в нулевой позиции.
Каждая специализация |
(начиная с C++23) |
Типичная реализация содержит только два элемента: указатель на константу CharT
и размер.
Предусмотрено несколько определений типов для общих типов символов:
Определены в заголовочном файле
<string_view> | |
Тип | Определение |
std::string_view | std::basic_string_view<char> |
std::wstring_view | std::basic_string_view<wchar_t> |
std::u8string_view (C++20) | std::basic_string_view<char8_t> |
std::u16string_view | std::basic_string_view<char16_t> |
std::u32string_view | std::basic_string_view<char32_t> |
Содержание |
[править] Параметры шаблона
CharT | — | тип символа |
Traits | — | класс CharTraits определяет операции с типом символа. Как и для std::basic_string, Traits::char_type должен именовать тот же тип, что и CharT , иначе программа некорректна.
|
[править] Типы элементы
Тип элемент | Определение | ||||
traits_type
|
Traits
| ||||
value_type
|
CharT
| ||||
pointer
|
CharT* | ||||
const_pointer
|
const CharT* | ||||
reference
|
CharT& | ||||
const_reference
|
const CharT& | ||||
const_iterator
|
определяемые реализацией конста��ты LegacyRandomAccessIterator
whose | ||||
iterator
|
const_iterator
| ||||
const_reverse_iterator
|
std::reverse_iterator<const_iterator> | ||||
reverse_iterator
|
const_reverse_iterator
| ||||
size_type
|
std::size_t | ||||
difference_type
|
std::ptrdiff_t |
Примечание: iterator
и const_iterator
относятся к одному и тому же типу, поскольку строковые представления являются представлениями постоянных последовательностей символов.
Все требования к типам итераторов для Container применяются также к типам iterator
и const_iterator
для basic_string_view
.
[править] Функции-элементы
Конструкторы и присваивания | |
(C++17) |
конструирует basic_string_view (public функция-элемент) |
(C++17) |
присваивает представлению (public функция-элемент) |
Итераторы | |
(C++17) |
возвращает итератор на начало (public функция-элемент) |
(C++17) |
возвращает итератор на конец (public функция-элемент) |
(C++17) |
возвращает обратный итератор на начало (public функция-элемент) |
(C++17) |
возвращает обратный итератор на конец (public функция-элемент) |
Доступ к элементу | |
(C++17) |
предоставляет доступ к указанному символу (public функция-элемент) |
(C++17) |
получает доступ к указанному символу с проверкой границ (public функция-элемент) |
(C++17) |
предоставляет доступ к первому символу (public функция-элемент) |
(C++17) |
предоставляет доступ к последнему символу (public функция-элемент) |
(C++17) |
возвращает указатель на первый символ представления (public функция-элемент) |
Ёмкость | |
(C++17) |
возвращает количество символов (public функция-элемент) |
(C++17) |
возвращает максимальное число символов (public функция-элемент) |
(C++17) |
проверяет, является ли представление пустым (public функция-элемент) |
Модификаторы | |
(C++17) |
сжимает представление, перемещая его начало вперёд (public функция-элемент) |
(C++17) |
сжимает представление, перемещая его конец назад (public функция-элемент) |
(C++17) |
обменивает содержимое (public функция-элемент) |
Операции | |
(C++17) |
копирует символы (public функция-элемент) |
(C++17) |
возвращает подстроку (public функция-элемент) |
(C++17) |
сравнивает два представления (public функция-элемент) |
(C++20) |
проверяет, начинается ли строковое представление с заданного префикса (public функция-элемент) |
(C++20) |
проверяет, заканчивается ли строковое представление заданным суффиксом (public функция-элемент) |
(C++23) |
проверяет, содержит ли строковое представление заданную подстроку или символ (public функция-элемент) |
(C++17) |
ищет символы в представлении (public функция-элемент) |
(C++17) |
ищет последнее вхождение подстроки (public функция-элемент) |
(C++17) |
ищет первое вхождение символов (public функция-элемент) |
(C++17) |
ищет последнее вхождение символов (public функция-элемент) |
(C++17) |
ищет первое отсутствие символов (public функция-элемент) |
(C++17) |
ищет последнее отсутствие символов (public функция-элемент) |
Константы | |
[static] (C++17) |
особое значение. Точное значение зависит от контекста (public static константа-элемент) |
[править] Функции, не являющиеся элементами
(C++17)(удалено в C++20)(удалено в C++20)(удалено в C++20)(удалено в C++20)(удалено в C++20)(C++20) |
лексикографически сравнивает два строковых представления (шаблон функции) |
Ввод/вывод | |
(C++17) |
выполняет потоковый вывод строковых представлений (шаблон функции) |
[править] Литералы
Определены в пространстве имён
std::literals::string_view_literals | |
(C++17) |
Создаёт строковое представление литерала массива символов (функция) |
[править] Вспомогательные классы
поддержка хэширования для строковых представлений (специализация шаблона класса) |
[править] Вспомогательные шаблоны
template<class CharT, class Traits> inline constexpr bool ranges::enable_borrowed_range<std::basic_string_view<CharT, Traits>> = true; |
(начиная с C++20) | |
Эта специализация std::ranges::enable_borrowed_range заставляет basic_string_view
соответствовать borrowed_range
.
template<class CharT, class Traits> inline constexpr bool ranges::enable_view<std::basic_string_view<CharT, Traits>> = true; |
(начиная с C++20) | |
Эта специализация std::ranges::enable_view делает basic_string_view
соответствующей view
.
[править] Руководства по выводу (начиная с C++20)
[править] Примечания
Ответственность за то, чтобы std::string_view
не пережил указанный им массив символов, является обязанностью программиста:
std::string_view good {"строковый литерал"}; // "Хороший" случай: `good` указывает на статический массив. Строковые литералы // обычно находятся в постоянных сегментах данных. std::string_view bad {"временная строка"s}; // "Плохой" случай: `bad` содержит висящий указатель, поскольку временный std::string, // созданный std::operator""s, будет уничтожен в конце оператора.
Специализации std::basic_string_view
уже являются тривиально копируемыми типами во всех существующих реализациях, даже до формального требования, введённого в C++23.
Макрос тест функциональности | Значение | Стандарт | Комментарий |
---|---|---|---|
__cpp_lib_string_view |
201606L | (C++17) | std::string_view
|
201803L | (C++20) | ConstexprIterator | |
__cpp_lib_string_contains |
202011L | (C++23) | contains
|
[править] Пример
Вывод:
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─ ▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄ ▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀ ▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
[править] Смотрите также
хранит и управляет последовательностями символов (шаблон класса) | |
(C++20) |
не владеющее представление непрерывной последовательности объектов (шаблон класса) |
(C++11) |
создаёт временный массив в списке инициализации, а затем ссылается на него (шаблон класса) |