Namespaces
Variants

std:: basic_string_view

From cppreference.net
Strings library
Classes
basic_string_view
(C++17)
Определено в заголовочном файле <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)

Предоставлены несколько 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 ,
и 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++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
создает 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)
невладеющее представление над непрерывной последовательностью объектов
(шаблон класса)
ссылается на временный массив, созданный при списочной инициализации
(шаблон класса)