From cppreference.com
constexprbasic_string_view()noexcept; (1) (since C++17)constexprbasic_string_view(constbasic_string_view&other)noexcept=default; (2) (since C++17)constexprbasic_string_view(constCharT*s,size_typecount); (3) (since C++17)constexprbasic_string_view(constCharT*s); (4) (since C++17)template<classIt,classEnd>constexprbasic_string_view(Itfirst,Endlast); (5) (since C++20)template<classR>constexprexplicitbasic_string_view(R&&r); (6) (since C++23)basic_string_view(std::nullptr_t)=delete; (7) (since C++23)1) Default constructor. Constructs an empty std::basic_string_view. After construction,
is equal to nullptr, and
is equal to 0.
2) Copy constructor. Constructs a view of the same content as other. After construction,
is equal to other.data(), and
is equal to other.size().
3) Constructs a view of the first count characters of the character array starting with the element pointed by s. s can contain null characters. The behavior is undefined if [s, s+count) is not a valid range (even though the constructor may not access any of the elements of this range). After construction,
is equal to s, and
is equal to count.
4) Constructs a view of the null-terminated character string pointed to by s, not including the terminating null character. The length of the view is determined as if by Traits::length(s). The behavior is undefined if [s, s+Traits::length(s)) is not a valid range. After construction,
is equal to s, and
is equal to Traits::length(s).
5) Constructs a std::basic_string_view over the range [first, last). The behavior is undefined if [first, last) is not a valid range, if It does not actually model
, or if End does not actually model
for It. After construction,
is equal to std::to_address(first), and
is equal to last-first.
This overload participates in overload resolution only if all following conditions are satisfied:
It satisfies
,
End satisfies
for It,
std::iter_value_t<It> and CharT are the same type, and
End is not convertible to
.
6) Constructs a std::basic_string_view over the range r. After construction,
is equal to ranges::data(r), and
is equal to ranges::size(r).
This overload participates in overload resolution only if all following conditions are satisfied:
std::remove_cvref_t<R> is not the same type as std::basic_string_view,
R models
and
,
ranges::range_value_t<R> and CharT are the same type,
R is not convertible to constCharT*, and
Let d be an lvalue of type std::remove_cvref_t<R>, d.operator::std::basic_string_view<CharT,Traits>() is not a valid expression.
7)std::basic_string_view cannot be constructed from nullptr.
Parameters
other - another view to initialize the view with s - pointer to an element of a character array to initialize the view with count - number of characters to include in the view first - iterator to the first character of the sequence last - iterator past the last character of the sequence or another sentinel r - a contiguous range that contains the sequence Complexity
1-3,5,6) Constant.
4) Linear in length of s.
Example
Run this code
#include<array>#include<iomanip>#include<iostream>#include<string>#include<string_view>intmain(){std::stringcppstr="Foo";std::string_viewcppstr_v(cppstr);// overload (2), after// std::string::operator string_viewstd::cout<<"1) cppstr_v: "<<std::quoted(cppstr_v)<<'\n';chararray[3]={'B','a','r'};std::string_viewarray_v(array,std::size(array));// overload (3)std::cout<<"2) array_v: "<<std::quoted(array_v)<<'\n';constchar*one_0_two="One\0Two";std::string_viewone_two_v{one_0_two,7};// overload (3)std::cout<<"3) one_two_v: \"";for(charc:one_two_v)std::cout<<(c!='\0'?c:'?');std::cout<<"\", one_two_v.size(): "<<one_two_v.size()<<'\n';std::string_viewone_v{one_0_two};// overload (4)std::cout<<"4) one_v: "<<std::quoted(one_v)<<", one_v.size(): "<<one_v.size()<<'\n';constexprstd::wstring_viewwcstr_v=L"xyzzy";// overload (4)std::cout<<"5) wcstr_v.size(): "<<wcstr_v.size()<<'\n';std::arrayar={'P','u','b'};std::string_viewar_v(ar.begin(),ar.end());// overload (5), C++20std::cout<<"6) ar_v: "<<std::quoted(ar_v)<<'\n';// std::string_view ar_v2{ar}; // overload (6), OK in C++23// std::cout << "ar_v2: " << std::quoted(ar_v2) << '\n'; // ar_v2: "Pub"[[maybe_unused]]autozero=[]{/* ... */returnnullptr;};// std::string_view s{zero()}; // overload (7), won't compile since C++23}Output:
1) cppstr_v: "Foo" 2) array_v: "Bar" 3) one_two_v: "One?Two", one_two_v.size(): 7 4) one_v: "One", one_v.size(): 3 5) wcstr_v.size(): 5 6) ar_v: "Pub" See also
assigns a view
(public member function)
constructs a basic_string
(public member function of std::basic_string<CharT,Traits,Allocator>)