|
|
constexpr basic_string_view()noexcept; | (1) | (since C++17) |
constexpr basic_string_view(const basic_string_view& other)noexcept=default; | (2) | (since C++17) |
constexpr basic_string_view(const CharT* s, size_type count); | (3) | (since C++17) |
constexpr basic_string_view(const CharT* s); | (4) | (since C++17) |
template<class It,class End> constexpr basic_string_view( It first, End last); | (5) | (since C++20) |
template<class R> constexprexplicit basic_string_view( R&& r); | (6) | (since C++23) |
basic_string_view(std::nullptr_t)= delete; | (7) | (since C++23) |
std::basic_string_view
. After construction,data() is equal tonullptr, andsize() is equal to0.[
s,
s+ count)
is not a valid range (even though the constructor may not access any of the elements of this range). After construction,data() is equal tos, andsize() is equal tocount.[
s,
s+ Traits::length(s))
is not a valid range. After construction,data() is equal tos, andsize() is equal toTraits::length(s).std::basic_string_view
over the range[
first,
last)
. The behavior is undefined if[
first,
last)
is not a valid range, ifIt
does not actually modelcontiguous_iterator
, or ifEnd
does not actually modelsized_sentinel_for
forIt
. After construction,data() is equal tostd::to_address(first), andsize() is equal tolast- first.This overload participates in overload resolution only if all following conditions are satisfied:
It
satisfiescontiguous_iterator
,End
satisfiessized_sentinel_for
forIt
,CharT
are the same type, andEnd
is not convertible tostd::size_t.std::basic_string_view
over the ranger. After construction,data() is equal toranges::data(r), andsize() is equal toranges::size(r).This overload participates in overload resolution only if all following conditions are satisfied:
std::basic_string_view
,R
modelscontiguous_range
andsized_range
,CharT
are the same type,R
is not convertible toconst CharT*, andstd::basic_string_view
cannot be constructed fromnullptr.Contents |
other | - | another view to initialize the view with |
s | - | pointer to a character array or a C string 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 |
#include <array>#include <iomanip>#include <iostream>#include <string>#include <string_view> int main(){std::string cppstr="Foo";std::string_view cppstr_v(cppstr);// overload (2), after// std::string::operator string_viewstd::cout<<"1) cppstr_v: "<<std::quoted(cppstr_v)<<'\n'; char array[3]={'B','a','r'};std::string_view array_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_view one_two_v{one_0_two,7};// overload (3)std::cout<<"3) one_two_v:\"";for(char c: one_two_v)std::cout<<(c!='\0'? c:'?');std::cout<<"\", one_two_v.size(): "<< one_two_v.size()<<'\n'; std::string_view one_v{one_0_two};// overload (4)std::cout<<"4) one_v: "<<std::quoted(one_v)<<", one_v.size(): "<< one_v.size()<<'\n'; constexprstd::wstring_view wcstr_v= L"xyzzy";// overload (4)std::cout<<"5) wcstr_v.size(): "<< wcstr_v.size()<<'\n'; std::array ar={'P','u','b'};std::string_view ar_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]]auto zero=[]{/* ... */return nullptr;};// 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(): 74) one_v: "One", one_v.size(): 35) wcstr_v.size(): 56) ar_v: "Pub"
assigns a view (public member function)[edit] | |
constructs abasic_string (public member function of std::basic_string<CharT,Traits,Allocator> )[edit] |