std:: basic_string_view
|
Определено в заголовочном файле
<string_view>
|
||
|
template
<
class
CharT,
|
(начиная с C++17) | |
Шаблон класса
basic_string_view
описывает объект, который может ссылаться на постоянную непрерывную последовательность
CharT
с первым элементом последовательности в позиции ноль.
Для
basic_string_view
str
указатели, итераторы и ссылки на элементы
str
становятся недействительными, когда операция инвалидирует указатель в диапазоне
[
str.
data
(
)
,
str.
data
(
)
+
str.
size
(
)
)
.
|
Каждая специализация
|
(начиная с C++23) |
Предоставлены несколько typedef-определений для распространённых символьных типов:
|
Определено в заголовке
<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++20)
|
проверяет, начинается ли строковое представление с заданного префикса
(публичная функция-член) |
|
(C++20)
|
проверяет, заканчивается ли строковое представление заданным суффиксом
(публичная функция-член) |
|
(C++23)
|
проверяет, содержит ли строковое представление заданную подстроку или символ
(публичная функция-член) |
|
найти символы в представлении
(публичная функция-член) |
|
|
найти последнее вхождение подстроки
(публичная функция-член) |
|
|
найти первое вхождение символов
(public member function) |
|
|
найти последнее вхождение символов
(публичная функция-член) |
|
|
найти первое отсутствие символов
(публичная функция-член) |
|
|
найти последнее отсутствие символов
(публичная функция-член) |
|
Константы |
|
|
[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)
|
ссылается на временный массив, созданный при
списочной инициализации
(шаблон класса) |