W3cubDocs

/C++

std::basic_string_view

Defined in header <string_view>
template<
    class CharT,
    class Traits = std::char_traits<CharT>
> class basic_string_view;
(since C++17)

The class template basic_string_view describes an object that can refer to a constant contiguous sequence of CharT with the first element of the sequence at position zero.

Every specialization of std::basic_string_view is a TriviallyCopyable type.

(since C++23)

A typical implementation holds only two members: a pointer to constant CharT and a size.

Several typedefs for common character types are provided:

Defined in header <string_view>
Type Definition
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>

Template parameters

CharT - character type
Traits - CharTraits class specifying the operations on the character type. Like for std::basic_string, Traits::char_type must name the same type as CharT or the program is ill-formed.

Member types

Member type Definition
traits_type Traits
value_type CharT
pointer CharT*
const_pointer const CharT*
reference CharT&
const_reference const CharT&
const_iterator implementation-defined constant LegacyRandomAccessIterator,
and LegacyContiguousIterator (until C++20)
ConstexprIterator, and contiguous_iterator (since C++20)

whose value_type is 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

Note: iterator and const_iterator are the same type because string views are views into constant character sequences.

All requirements on the iterator types of a Container applies to the iterator and const_iterator types of basic_string_view as well.

Member functions

Constructors and assignment
(C++17)
constructs a basic_string_view
(public member function)
(C++17)
assigns a view
(public member function)
Iterators
(C++17)
returns an iterator to the beginning
(public member function)
(C++17)
returns an iterator to the end
(public member function)
(C++17)
returns a reverse iterator to the beginning
(public member function)
(C++17)
returns a reverse iterator to the end
(public member function)
Element access
(C++17)
accesses the specified character
(public member function)
(C++17)
accesses the specified character with bounds checking
(public member function)
(C++17)
accesses the first character
(public member function)
(C++17)
accesses the last character
(public member function)
(C++17)
returns a pointer to the first character of a view
(public member function)
Capacity
(C++17)
returns the number of characters
(public member function)
(C++17)
returns the maximum number of characters
(public member function)
(C++17)
checks whether the view is empty
(public member function)
Modifiers
(C++17)
shrinks the view by moving its start forward
(public member function)
(C++17)
shrinks the view by moving its end backward
(public member function)
(C++17)
swaps the contents
(public member function)
Operations
(C++17)
copies characters
(public member function)
(C++17)
returns a substring
(public member function)
(C++17)
compares two views
(public member function)
(C++20)
checks if the string view starts with the given prefix
(public member function)
(C++20)
checks if the string view ends with the given suffix
(public member function)
(C++23)
checks if the string view contains the given substring or character
(public member function)
(C++17)
find characters in the view
(public member function)
(C++17)
find the last occurrence of a substring
(public member function)
(C++17)
find first occurrence of characters
(public member function)
(C++17)
find last occurrence of characters
(public member function)
(C++17)
find first absence of characters
(public member function)
(C++17)
find last absence of characters
(public member function)

Constants

[static] (C++17)
special value. The exact meaning depends on the context
(public static member constant)

Non-member functions

(C++17)(removed in C++20)(removed in C++20)(removed in C++20)(removed in C++20)(removed in C++20)(C++20)
lexicographically compares two string views
(function template)
Input/output
(C++17)
performs stream output on string views
(function template)

Literals

Defined in inline namespace std::literals::string_view_literals
(C++17)
creates a string view of a character array literal
(function)

Helper classes

(C++17)(C++17)(C++20)(C++17)(C++17)
hash support for string views
(class template specialization)

Helper templates

template< class CharT, class Traits >
inline constexpr bool
    ranges::enable_borrowed_range<std::basic_string_view<CharT, Traits>> = true;
(since C++20)

This specialization of ranges::enable_borrowed_range makes basic_string_view satisfy borrowed_range.

template< class CharT, class Traits >
inline constexpr bool
    ranges::enable_view<std::basic_string_view<CharT, Traits>> = true;
(since C++20)

This specialization of ranges::enable_view makes basic_string_view satisfy view.

Deduction guides(since C++20)

Notes

It is the programmer's responsibility to ensure that std::string_view does not outlive the pointed-to character array:

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.

Specializations of std::basic_string_view are already trivially copyable types in all existing implementations, even before the formal requirement introduced in C++23.

Feature-test macro Value Std Comment
__cpp_lib_string_view 201606L (C++17) std::string_view
201803L (C++20) ConstexprIterator
__cpp_lib_string_contains 202011L (C++23) contains

Example

#include <iostream>
#include <string_view>
 
int main()
{
    constexpr std::string_view unicode[] { "▀▄─", "▄▀─", "▀─▄", "▄─▀" };
 
    for (int y{}, p{}; y != 6; ++y, p = ((p + 1) % 4))
    {
        for (int x{}; x != 16; ++x)
            std::cout << unicode[p];
        std::cout << '\n';
    }
}

Output:

▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄
▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─

See also

stores and manipulates sequences of characters
(class template)
(C++20)
a non-owning view over a contiguous sequence of objects
(class template)
(C++11)
creates a temporary array in list-initialization and then references it
(class template)

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