std::basic_string_view
| Определён в заголовке <string_view>
|
||
template<
class CharT,
class Traits = std::char_traits<CharT>
> class basic_string_view;
|
(начиная с C++17) | |
Шаблон класса basic_string_view описывает объект, который может ссылаться на постоянную непрерывную последовательность символов CharT с первым элементом последовательности в позиции ноль.
Для basic_string_view str указатели, итераторы и ссылки на элементы str становятся недействительными, когда операция аннулирует указатель в диапазоне [str.data(), str.data() + str.size()).
|
Каждая специализация |
(начиная с C++23) |
Предоставлены несколько определений типов для распространённых символьных типов:
Определён в заголовке
<string_view> | |
| Тип | Определение |
| std::string_view (C++17) | std::basic_string_view<char>
|
| std::wstring_view (C++17) | std::basic_string_view<wchar_t>
|
| std::u8string_view (C++20) | std::basic_string_view<char8_t>
|
| std::u16string_view (C++17) | std::basic_string_view<char16_t>
|
| std::u32string_view (C++17) | 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
,
чей
|
||||
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
.
Члены данных
| Участник | Описание |
const_pointer
data_
|
указатель на базовую последовательность
( объект-член только для демонстрации* ) |
size_type
size_
|
количество символов
( объект-член только для демонстрации* ) |
Функции-члены
Конструкторы и присваивание |
|
создает
basic_string_view
(публичная функция-член) |
|
|
присваивает представление
(публичная функция-член) |
|
Итераторы |
|
|
возвращает итератор на начало
(публичная функция-член) |
|
|
возвращает итератор на конец
(публичная функция-член) |
|
|
возвращает обратный итератор на начало
(публичная функция-член) |
|
|
возвращает обратный итератор на конец
(публичная функция-член) |
|
Доступ к элементам |
|
|
обращается к указанному символу
(публичная функция-член) |
|
|
обращается к указанному символу с проверкой границ
(публичная функция-член) |
|
|
обращается к первому символу
(публичная функция-член) |
|
|
обращается к последнему символу
(public member function) |
|
|
возвращает указатель на первый символ представления
(публичная функция-член) |
|
Ёмкость |
|
|
возвращает количество символов
(публичная функция-член) |
|
|
возвращает максимальное количество символов
(публичная функция-член) |
|
|
проверяет, является ли представление пустым
(публичная функция-член) |
|
Модификаторы |
|
|
уменьшает представление, перемещая его начало вперед
(публичная функция-член) |
|
|
уменьшает представление, перемещая его конец назад
(публичная функция-член) |
|
|
обменивает содержимое
(публичная функция-член) |
|
Операции | |
| копирует символы (открытый метод) | |
| возвращает подстроку (открытый метод) | |
(C++26) |
возвращает подпредставление (открытый метод) |
| сравнивает два представления (открытый метод) | |
(C++20) |
проверяет, начинается ли строковое представление с указанного префикса (открытый метод) |
(C++20) |
проверяет, заканчивается ли строковое представление указанным суффиксом (открытый метод) |
(C++23) |
проверяет, содержит ли строковое представление указанную подстроку или символ (открытый метод) |
| находит символы в представлении (открытый метод) | |
| находит последнее вхождение подстроки (открытый метод) | |
| находит первое вхождение символов (открытый метод) | |
| находит последнее вхождение символов (открытый метод) | |
| находит первое отсутствие символов (открытый метод) | |
| находит последнее отсутствие символов (открытый метод) | |
Константы |
|
|
[static]
|
специальное значение. Точное значение зависит от контекста
(public static member constant) |
Функции, не являющиеся членами класса
|
(C++17)
(удалено в C++20)
(удалено в C++20)
(удалено в C++20)
(удалено в C++20)
(удалено в C++20)
(C++20)
|
лексикографически сравнивает два строковых представления
(шаблон функции) |
Ввод/вывод |
|
|
(C++17)
|
выполняет потоковый вывод для строковых представлений
(шаблон функции) |
Литералы
|
Определено во встроенном пространстве имен
std::literals::string_view_literals
|
|
|
(C++17)
|
создает string_view из символьного литерала массива
(функция) |
Вспомогательные классы
|
(C++17)
(C++17)
(C++20)
(C++17)
(C++17)
|
поддержка хеширования для строковых представлений
(специализация шаблона класса) |
Вспомогательные шаблоны
|
template
<
class
CharT,
class
Traits
>
inline
constexpr
bool
|
(начиная с C++20) | |
Эта специализация
ranges::enable_borrowed_range
позволяет
basic_string_view
удовлетворять требованиям
borrowed_range
.
|
template
<
class
CharT,
class
Traits
>
inline
constexpr
bool
|
(начиная с C++20) | |
Эта специализация
ranges::enable_view
позволяет
basic_string_view
удовлетворять требованиям
view
.
Правила вывода |
(начиная с C++20) |
Примечания
Это ответственность программиста — гарантировать, что
std::string_view
не переживет массив символов, на который он указывает:
std::string_view good{"a string literal"}; // "Хороший" случай: `good` указывает на статический массив. // Строковые литералы размещаются в постоянном хранилище данных. std::string_view bad{"a temporary string"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++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3203 | C++17 |
только указатели, итераторы и ссылки,
возвращаемые функциями-членами
basic_string_view
могут быть инвалидированы
|
все указатели, итераторы и ссылки
на элементы
basic_string_view
могут быть инвалидированы |
Смотрите также
|
хранит и манипулирует последовательностями символов
(шаблон класса) |
|
|
объединяет две строки, строку и
char
, или строку и
string_view
(шаблон функции) |
|
|
(C++20)
|
невладеющее представление над непрерывной последовательностью объектов
(шаблон класса) |
|
(C++11)
|
ссылается на временный массив, созданный при
списочной инициализации
(шаблон класса) |