class CharT,
class Traits = std::char_traits<CharT>
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 std::basic_string_view
is a TriviallyCopyable type.
Several typedefs for common character types are provided:
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> [edit] 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. [edit] 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 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.
const_pointer
data_
a pointer to the underlying sequence
size_type
size_
the number of characters
basic_string_view
This specialization of ranges::enable_borrowed_range makes basic_string_view
satisfy borrowed_range
.
inline constexpr bool
This specialization of ranges::enable_view makes basic_string_view
satisfy view
.
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.
#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:
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ[edit] 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 referencesbasic_string_view
might be invalidated all pointers, iterators, and references
basic_string_view
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4