std:: basic_string_view
Defined in header
<string_view>
|
||
template
<
class
CharT,
|
(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) |
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
Nested 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.
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
(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
|
(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
|
(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
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_view
may be invalidated |
See also
stores and manipulates sequences of characters
(class template) |
|
concatenates two strings, a string and a
char
, or a string and
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) |