Namespaces
Variants

std::basic_string_view

С сайта ru.cppreference.net
 
 
 
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 const CharT *
reference CharT &
const_reference const CharT &
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 являются одним и тем же типом, поскольку строковые представления являются представлениями постоянных символьных последовательностей.

Все требования к типам итераторов для Container также применяются к типам iterator и const_iterator для basic_string_view .

Члены данных

Участник Описание
const_pointer data_ указатель на базовую последовательность
( объект-член только для демонстрации* )
size_type size_ количество символов
( объект-член только для демонстрации* )

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

Конструкторы и присваивание
создает basic_string_view
(публичная функция-член)
присваивает представление
(публичная функция-член)
Итераторы
возвращает итератор на начало
(публичная функция-член)
возвращает итератор на конец
(публичная функция-член)
возвращает обратный итератор на начало
(публичная функция-член)
возвращает обратный итератор на конец
(публичная функция-член)
Доступ к элементам
обращается к указанному символу
(публичная функция-член)
обращается к указанному символу с проверкой границ
(публичная функция-член)
обращается к первому символу
(публичная функция-член)
обращается к последнему символу
(public member function)
возвращает указатель на первый символ представления
(публичная функция-член)
Ёмкость
возвращает количество символов
(публичная функция-член)
возвращает максимальное количество символов
(публичная функция-член)
проверяет, является ли представление пустым
(публичная функция-член)
Модификаторы
уменьшает представление, перемещая его начало вперед
(публичная функция-член)
уменьшает представление, перемещая его конец назад
(публичная функция-член)
обменивает содержимое
(публичная функция-член)
Операции
копирует символы
(открытый метод)
возвращает подстроку
(открытый метод)
(C++26)
возвращает подпредставление
(открытый метод)
сравнивает два представления
(открытый метод)
проверяет, начинается ли строковое представление с указанного префикса
(открытый метод)
(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
создает string_view из символьного литерала массива
(функция)

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

поддержка хеширования для строковых представлений
(специализация шаблона класса)

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

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` указывает на статический массив.
    // Строковые литералы размещаются в постоянном хранилище данных.
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

Пример

#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 Applied to Behavior as published Correct behavior
LWG 3203 C++17 только указатели, итераторы и ссылки,
возвращаемые функциями-членами
basic_string_view могут быть инвалидированы
все указатели, итераторы и ссылки
на элементы basic_string_view
могут быть инвалидированы

Смотрите также

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