std::inplace_vector<T,N>:: operator=
From cppreference.net
<
cpp
|
container
|
inplace vector
|
constexpr
inplace_vector
&
operator
=
(
const
inplace_vector
&
other
)
;
|
(1) | (начиная с C++26) |
|
constexpr
inplace_vector
&
operator
=
(
inplace_vector
&&
other
)
noexcept ( /* см. ниже */ ) ; |
(2) | (начиная с C++26) |
|
constexpr
inplace_vector
&
operator
=
(
std::
initializer_list
<
T
>
init
)
;
|
(3) | (начиная с C++26) |
Заменяет содержимое
inplace_vector
.
1)
Оператор копирующего присваивания
. Также
тривиальный оператор копирующего присваивания
, если
std::
inplace_vector
<
T, N
>
имеет
тривиальный деструктор
, и
std::
is_trivially_copy_constructible_v
<
T
>
&&
std::
is_trivially_copy_assignable_v
<
T
>
равно
true
. Заменяет содержимое копией содержимого
other
.
2)
Оператор перемещающего присваивания
. Также
тривиальный оператор перемещающего присваивания
, если
std::
inplace_vector
<
T, N
>
имеет
тривиальный деструктор
, и
std::
is_trivially_move_constructible_v
<
T
>
&&
std::
is_trivially_move_assignable_v
<
T
>
равно
true
. Заменяет содержимое содержимым
other
с использованием семантики перемещения (т.е. данные из
other
перемещаются в этот контейнер).
other
после этого находится в допустимом, но неопределённом состоянии.
3)
Заменяет содержимое на указанное в списке инициализации
init
.
Содержание |
Параметры
| other | - |
другой
inplace_vector
для использования в качестве источника для инициализации элементов контейнера
|
| init | - | список инициализации для инициализации элементов контейнера |
Сложность
1,2)
Линейно относительно размера
*
this
и
other
.
3)
Линейно по размеру
*
this
и
init
.
Исключения
2)
noexcept
спецификация:
noexcept
(
N
==
0
||
(
std::
is_nothrow_move_assignable_v
<
T
>
&&
Пример
Запустить этот код
#include <initializer_list> #include <inplace_vector> #include <new> #include <print> #include <ranges> #include <string> int main() { std::inplace_vector<int, 4> x({1, 2, 3}), y; std::println("Изначально:"); std::println("x = {}", x); std::println("y = {}", y); std::println("Копирующее присваивание копирует данные из x в y:"); y = x; // перегрузка (1) std::println("x = {}", x); std::println("y = {}", y); std::inplace_vector<std::string, 3> z, w{"\N{CAT}", "\N{GREEN HEART}"}; std::println("Изначально:"); std::println("z = {}", z); std::println("w = {}", w); std::println("Перемещающее присваивание перемещает данные из w в z:"); z = std::move(w); // перегрузка (2) std::println("z = {}", z); std::println("w = {}", w); // w находится в допустимом, но неопределенном состоянии auto l = {4, 5, 6, 7}; std::println("Присваивание initializer_list {} в x:", l); x = l; // перегрузка (3) std::println("x = {}", x); std::println("Присваивание initializer_list с размером больше N вызывает исключение:"); try { x = {1, 2, 3, 4, 5}; // исключение: (размер initializer list == 5) > (емкость N == 4) } catch(const std::bad_alloc& ex) { std::println("ex.what(): {}", ex.what()); } }
Возможный вывод:
Изначально: x = [1, 2, 3] y = [] Копирующее присваивание копирует данные из x в y: x = [1, 2, 3] y = [1, 2, 3] Изначально: z = [] w = ["🐈", "💚"] Перемещающее присваивание перемещает данные из w в z: z = ["🐈", "💚"] w = ["", ""] Присваивание initializer_list [4, 5, 6, 7] в x: x = [4, 5, 6, 7] Присваивание initializer_list с размером больше N вызывает исключение: ex.what(): std::bad_alloc
Смотрите также
конструирует
inplace_vector
(public member function) |
|
|
присваивает значения контейнеру
(public member function) |