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.
For a basic_string_view str, pointers, iterators, and references to elements of str are invalidated when an operation invalidates a pointer in the range [str.data(), str.data() + str.size()).
|
Every specialization of |
(since C++23) |
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.
|
Nested types
| 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,
whose | ||||
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.
Data members
| Member | Description |
const_pointer data_
|
a pointer to the underlying sequence (exposition-only member object*) |
size_type size_
|
the number of characters (exposition-only member object*) |
Member functions
Constructors and assignment | |
constructs a basic_string_view (public member function) | |
| assigns a view (public member function) | |
Iterators | |
| returns an iterator to the beginning (public member function) | |
| returns an iterator to the end (public member function) | |
| returns a reverse iterator to the beginning (public member function) | |
| returns a reverse iterator to the end (public member function) | |
Element access | |
| accesses the specified character (public member function) | |
| accesses the specified character with bounds checking (public member function) | |
| accesses the first character (public member function) | |
| accesses the last character (public member function) | |
| returns a pointer to the first character of a view (public member function) | |
Capacity | |
| returns the number of characters (public member function) | |
| returns the maximum number of characters (public member function) | |
| checks whether the view is empty (public member function) | |
Modifiers | |
| shrinks the view by moving its start forward (public member function) | |
| shrinks the view by moving its end backward (public member function) | |
| swaps the contents (public member function) | |
Operations | |
| copies characters (public member function) | |
| returns a substring (public member function) | |
| 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) |
| find characters in the view (public member function) | |
| find the last occurrence of a substring (public member function) | |
| find first occurrence of characters (public member function) | |
| find last occurrence of characters (public member function) | |
| find first absence of characters (public member function) | |
| find last absence of characters (public member function) | |
Constants | |
[static] |
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
| 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 | Feature |
|---|---|---|---|
__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()
{
#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';
}
}
Output:
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄
▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄
▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3203 | C++17 | only pointers, iterators, and references returned from the member functions of basic_string_view might be invalidated
|
all pointers, iterators, and references to elements of basic_string_viewmay be invalidated |
See also
| stores and manipulates sequences of characters (class template) | |
concatenates two strings, a string and a char, or a string and std::string_view (function template) | |
(C++20) |
a non-owning view over a contiguous sequence of objects (class template) |
(C++11) |
references a temporary array created in list-initialization (class template) |