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 | constCharT* | ||||
reference | CharT& | ||||
const_reference | constCharT& | ||||
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 — один и тот же тип, поскольку string view являются представлениями константных последовательностей символов.
Все требования к типам итераторов контейнера также применяются к типам iterator и const_iterator для basic_string_view.
Поля данных
| Поле | Описание |
|---|---|
const_pointer data_ | указатель на базовую последовательность (поле-объект только для описания) |
size_type size_ | количество символов (поле-объект только для описания) |
Функции-члены
Конструкторы и присваивание |
|
создаёт basic_string_view (открытая функция-член) |
|
| присваивает представление (открытая функция-член) |
|
Итераторы |
|
| возвращает итератор на начало (открытая функция-член) |
|
| возвращает итератор на конец (открытая функция-член) |
|
| возвращает обратный итератор на начало (открытая функция-член) |
|
| возвращает обратный итератор на конец (открытая функция-член) |
|
Доступ к элементам |
|
| обращается к указанному символу (открытая функция-член) |
|
| обращается к указанному символу с проверкой границ (открытая функция-член) |
|
| обращается к первому символу (открытая функция-член) |
|
| обращается к последнему символу (открытая функция-член) |
|
| возвращает указатель на первый символ представления (открытая функция-член) |
|
Размер |
|
| возвращает количество символов (открытая функция-член) |
|
| возвращает максимальное количество символов (открытая функция-член) |
|
| проверяет, пусто ли представление (открытая функция-член) |
|
Модификаторы |
|
| уменьшает представление, сдвигая его начало вперёд (открытая функция-член) |
|
| уменьшает представление, сдвигая его конец назад (открытая функция-член) |
|
| меняет содержимое местами (открытая функция-член) |
|
Операции |
|
| копирует символы (открытая функция-член) |
|
| возвращает подстроку (открытая функция-член) |
|
|
(C++26) | возвращает под-представление (открытая функция-член) |
| сравнивает два представления (открытая функция-член) |
|
|
(C++20) | проверяет, начинается ли строковое представление с заданного префикса (открытая функция-член) |
|
(C++20) | проверяет, заканчивается ли строковое представление заданным суффиксом (открытая функция-член) |
|
(C++23) | проверяет, содержит ли строковое представление заданную подстроку или символ (открытая функция-член) |
| ищет символы в представлении (открытая функция-член) |
|
| ищет последнее вхождение подстроки (открытая функция-член) |
|
| ищет первое вхождение символов (открытая функция-член) |
|
| ищет последнее вхождение символов (открытая функция-член) |
|
| ищет первое отсутствие символов (открытая функция-член) |
|
| ищет последнее отсутствие символов (открытая функция-член) |
|
Константы |
|
|
[статическая] | специальное значение. Точное значение зависит от контекста (открытая статическая константа-член) |
Функции, не являющиеся членами
|
(C++17)(удалён в C++20)(удалён в C++20)(удалён в C++20)(удалён в C++20)(удалён в C++20)(C++20) | лексикографически сравнивает два строковых представления (шаблон функции) |
Ввод/вывод |
|
|
(C++17) | выводит строковые представления в поток (шаблон функции) |
Литералы
Определён в пространстве имён inline std::literals::string_view_literals |
|
|---|---|
|
(C++17) | создаёт строковое представление литерала — массива символов (функция) |
Вспомогательные классы
|
(C++17)(C++17)(C++20)(C++17)(C++17) | поддержка хеширования строковых представлений (частичная специализация шаблона класса) |
Вспомогательные шаблоны
template< class CharT, class Traits >
inline constexpr bool
ranges::enable_borrowed_range<std::basic_string_view<CharT, Traits>> = true;
| (начиная с C++20) |
Эта специализация 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) |
Эта специализация ranges::enable_view позволяет basic_string_view удовлетворять требованиям view.
Руководства по выведению типов | (начиная с C++20) |
Примечания
Программист несёт ответственность за то, чтобы std::string_view не пережило массив символов, на который оно указывает:
std::string_view good{"a string literal"};
// "Good" case: `good` points to a static array.
// String literals reside in persistent data storage.
std::string_view bad{"a temporary string"s};
// "Bad" case: `bad` holds a dangling pointer since the std::string temporary,
// created by std::operator""s, will be destroyed at the end of the statement.
Во всех существующих реализациях специализации 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 |
Пример
#include <iostream>
#include <string_view>
int main()
{
#define A "▀"
#define B "▄"
#define C "─"
constexpr std::string_view blocks[]{A B C, B A C, A C B, B C A};
for (int y{}, p{}; y != 8; ++y, p = ((p + 1) % 4))
{
for (char x{}; x != 29; ++x)
std::cout << blocks[p];
std::cout << '\n';
}
}
Вывод:
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─ ▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄ ▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀ ▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─ ▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄ ▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение согласно опубликованному стандарту | Исправленное поведение |
|---|---|---|---|
| LWG 3203 | C++17 | недействительными могли стать только указатели, итераторы и ссылки, возвращённые функциями-членами basic_string_view | все указатели, итераторы и ссылки на элементы basic_string_viewмогут стать недействительными |
См. также
| хранит и обрабатывает последовательности символов (шаблон класса) |
|
объединяет две строки, строку и char или строку и string_view (шаблон функции) |
|
|
(C++20) | невладеющее представление непрерывной последовательности объектов (шаблон класса) |
|
(C++11) | ссылается на временный массив, созданный при инициализации списком (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/basic_string_view