std::basic_string_view<CharT,Traits>:: basic_string_view
From cppreference.net
<
cpp
|
string
|
basic string view
|
constexpr
basic_string_view
(
)
noexcept
;
|
(1) | (начиная с C++17) |
|
constexpr
basic_string_view
(
const
basic_string_view
&
other
)
noexcept
=
default
;
|
(2) | (начиная с C++17) |
|
constexpr
basic_string_view
(
const
CharT
*
s, size_type count
)
;
|
(3) | (начиная с C++17) |
|
constexpr
basic_string_view
(
const
CharT
*
s
)
;
|
(4) | (начиная с C++17) |
|
template
<
class
It,
class
End
>
constexpr basic_string_view ( It first, End last ) ; |
(5) | (начиная с C++20) |
|
template
<
class
R
>
constexpr explicit basic_string_view ( R && r ) ; |
(6) | (начиная с C++23) |
|
basic_string_view
(
std::
nullptr_t
)
=
delete
;
|
(7) | (начиная с C++23) |
1)
Конструктор по умолчанию. Создает пустой
std::basic_string_view
. После создания
data()
равен
nullptr
, а
size()
равен
0
.
2)
Конструктор копирования. Создает представление того же содержимого, что и
other
. После построения
data()
равен
other.
data
(
)
, а
size()
равен
other.
size
(
)
.
3)
Создает представление первых
count
символов массива символов, начиная с элемента, на который указывает
s
.
s
может содержать нулевые символы. Поведение не определено, если
[
s
,
s
+
count
)
не является допустимым диапазоном (даже если конструктор может не обращаться к любым элементам этого диапазона). После построения
data()
равен
s
, а
size()
равен
count
.
4)
Создает представление строки символов с нулевым завершением, на которую указывает
s
, не включая завершающий нулевой символ. Длина представления определяется как если бы с помощью
Traits
::
length
(
s
)
. Поведение не определено, если
[
s
,
s
+
Traits
::
length
(
s
)
)
не является допустимым диапазоном. После построения
data()
равен
s
, а
size()
равен
Traits
::
length
(
s
)
.
5)
Создает
std::basic_string_view
для диапазона
[
first
,
last
)
. Поведение не определено, если
[
first
,
last
)
не является корректным диапазоном, если
It
не моделирует
contiguous_iterator
, или если
End
не моделирует
sized_sentinel_for
для
It
. После создания
data()
равен
std::
to_address
(
first
)
, а
size()
равен
last
-
first
.
Эта перегрузка участвует в разрешении перегрузки только при выполнении всех следующих условий:
-
-
Itудовлетворяетcontiguous_iterator, -
Endудовлетворяетsized_sentinel_forдляIt, -
std::
iter_value_t
<
It
>
и
CharTявляются одним и тем же типом, и -
Endне преобразуется в std::size_t .
-
6)
Создает
std::basic_string_view
для диапазона
r
. После создания
data()
равен
ranges::
data
(
r
)
, а
size()
равен
ranges::
size
(
r
)
.
Эта перегрузка участвует в разрешении перегрузки только при выполнении всех следующих условий:
-
-
std::
remove_cvref_t
<
R
>
не является тем же типом, что и
std::basic_string_view, -
Rмоделируетcontiguous_rangeиsized_range, -
ranges::
range_value_t
<
R
>
и
CharTявляются одним и тем же типом, -
Rне конвертируется в const CharT * , и - Пусть d будет lvalue типа std:: remove_cvref_t < R > , d. operator :: std:: basic_string_view < CharT, Traits > ( ) не является корректным выражением.
-
std::
remove_cvref_t
<
R
>
не является тем же типом, что и
7)
std::basic_string_view
не может быть создан из
nullptr
.
Содержание |
Параметры
| other | - | другое представление для инициализации текущего представления |
| s | - | указатель на массив символов или C-строку для инициализации представления |
| count | - | количество символов для включения в представление |
| first | - | итератор на первый символ последовательности |
| last | - | итератор на позицию после последнего символа последовательности или другой страж |
| r | - | непрерывный диапазон, содержащий последовательность |
Сложность
1-3,5,6)
Константа.
4)
Линейная по длине
s
.
Пример
Запустить этот код
#include <array> #include <iomanip> #include <iostream> #include <string> #include <string_view> int main() { std::string cppstr = "Foo"; std::string_view cppstr_v(cppstr); // перегрузка (2), после // std::string::operator string_view std::cout << "1) cppstr_v: " << std::quoted(cppstr_v) << '\n'; char array[3] = {'B', 'a', 'r'}; std::string_view array_v(array, std::size(array)); // перегрузка (3) std::cout << "2) array_v: " << std::quoted(array_v) << '\n'; const char* one_0_two = "One\0Two"; std::string_view one_two_v{one_0_two, 7}; // перегрузка (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}; // перегрузка (4) std::cout << "4) one_v: " << std::quoted(one_v) << ", one_v.size(): " << one_v.size() << '\n'; constexpr std::wstring_view wcstr_v = L"xyzzy"; // перегрузка (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()); // перегрузка (5), C++20 std::cout << "6) ar_v: " << std::quoted(ar_v) << '\n'; // std::string_view ar_v2{ar}; // перегрузка (6), OK в 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()}; // перегрузка (7), не скомпилируется с C++23 }
Вывод:
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"
Смотрите также
|
присваивает представление
(публичная функция-член) |
|
создаёт
basic_string
(публичная функция-член
std::basic_string<CharT,Traits,Allocator>
)
|