Spec-Zone.ru › C++

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()).

Каждая специализация std::basic_string_view является типом TriviallyCopyable.

(начиная с 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,
и LegacyContiguousIterator (до C++20)
ConstexprIterator и contiguous_iterator (начиная с C++20)

чьим value_type является CharT

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_ количество символов
(поле-объект только для описания)

Функции-члены

Конструкторы и присваивание
(constructor)
создаёт basic_string_view
(открытая функция-член)
operator=
присваивает представление
(открытая функция-член)
Итераторы
begincbegin
возвращает итератор на начало
(открытая функция-член)
endcend
возвращает итератор на конец
(открытая функция-член)
rbegincrbegin
возвращает обратный итератор на начало
(открытая функция-член)
rendcrend
возвращает обратный итератор на конец
(открытая функция-член)
Доступ к элементам
operator[]
обращается к указанному символу
(открытая функция-член)
at
обращается к указанному символу с проверкой границ
(открытая функция-член)
front
обращается к первому символу
(открытая функция-член)
back
обращается к последнему символу
(открытая функция-член)
data
возвращает указатель на первый символ представления
(открытая функция-член)
Размер
sizelength
возвращает количество символов
(открытая функция-член)
max_size
возвращает максимальное количество символов
(открытая функция-член)
empty
проверяет, пусто ли представление
(открытая функция-член)
Модификаторы
remove_prefix
уменьшает представление, сдвигая его начало вперёд
(открытая функция-член)
remove_suffix
уменьшает представление, сдвигая его конец назад
(открытая функция-член)
swap
меняет содержимое местами
(открытая функция-член)
Операции
copy
копирует символы
(открытая функция-член)
substr
возвращает подстроку
(открытая функция-член)
subview
(C++26)
возвращает под-представление
(открытая функция-член)
compare
сравнивает два представления
(открытая функция-член)
starts_with
(C++20)
проверяет, начинается ли строковое представление с заданного префикса
(открытая функция-член)
ends_with
(C++20)
проверяет, заканчивается ли строковое представление заданным суффиксом
(открытая функция-член)
contains
(C++23)
проверяет, содержит ли строковое представление заданную подстроку или символ
(открытая функция-член)
find
ищет символы в представлении
(открытая функция-член)
rfind
ищет последнее вхождение подстроки
(открытая функция-член)
find_first_of
ищет первое вхождение символов
(открытая функция-член)
find_last_of
ищет последнее вхождение символов
(открытая функция-член)
find_first_not_of
ищет первое отсутствие символов
(открытая функция-член)
find_last_not_of
ищет последнее отсутствие символов
(открытая функция-член)

Константы

npos
[статическая]
специальное значение. Точное значение зависит от контекста
(открытая статическая константа-член)

Функции, не являющиеся членами

operator==operator!=operator<operator>operator<=operator>=operator<=>
(C++17)(удалён в C++20)(удалён в C++20)(удалён в C++20)(удалён в C++20)(удалён в C++20)(C++20)
лексикографически сравнивает два строковых представления
(шаблон функции)
Ввод/вывод
operator<<
(C++17)
выводит строковые представления в поток
(шаблон функции)

Литералы

Определён в пространстве имён inline std::literals::string_view_literals
operator""sv
(C++17)
создаёт строковое представление литерала — массива символов
(функция)

Вспомогательные классы

std::hash<std::string_view>std::hash<std::wstring_view>std::hash<std::u8string_view>std::hash<std::u16string_view>std::hash<std::u32string_view>
(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
могут стать недействительными

См. также

basic_string
хранит и обрабатывает последовательности символов
(шаблон класса)
operator+
объединяет две строки, строку и char или строку и string_view
(шаблон функции)
span
(C++20)
невладеющее представление непрерывной последовательности объектов
(шаблон класса)
initializer_list
(C++11)
ссылается на временный массив, созданный при инициализации списком
(шаблон класса)

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

Spec-Zone.ru

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