std::basic_string_view<CharT,Traits>::basic_string_view - cppreference.com

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,

data()

is equal to nullptr, and

size()

is equal to 0.

2) Copy constructor. Constructs a view of the same content as other. After construction,

data()

is equal to other.data(), and

size()

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,

data()

is equal to s, and

size()

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,

data()

is equal to s, and

size()

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

contiguous_iterator

, or if End does not actually model

sized_sentinel_for

for It. After construction,

data()

is equal to std::to_address(first), and

size()

is equal to last-first.

This overload participates in overload resolution only if all following conditions are satisfied:

It satisfies

contiguous_iterator

,

End satisfies

sized_sentinel_for

for It,

std::iter_value_t<It> and CharT are the same type, and

End is not convertible to

std::size_t

.

6) Constructs a std::basic_string_view over the range r. After construction,

data()

is equal to ranges::data(r), and

size()

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

contiguous_range

and

sized_range

,

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)

[edit]

constructs a basic_string
(public member function of std::basic_string<CharT,Traits,Allocator>)

[edit]