std::inplace_vector<T,N>::operator=
constexpr inplace_vector& operator=( const inplace_vector& other ); | (1) | (начиная с C++26) |
constexpr inplace_vector& operator=( inplace_vector&& other )
noexcept(/* see below */);
| (2) | (начиная с C++26) |
constexpr inplace_vector& operator=( std::initializer_list<T> init ); | (3) | (начиная с C++26) |
Заменяет содержимое inplace_vector.
1) Оператор копирующего присваивания. Заменяет содержимое копией содержимого
other.
Этот оператор является тривиальным, если std::inplace_vector<T,N> имеет тривиальный деструктор, а
std::is_trivially_copy_constructible_v<T> && std::is_trivially_copy_assignable_v<T> является true.
2) Оператор перемещающего присваивания. Заменяет содержимое содержимым
other, используя семантику перемещения (то есть данные в other перемещаются из other в этот контейнер). После этого other находится в допустимом, но неуточнённом состоянии.
Этот оператор является тривиальным, если std::inplace_vector<T,N> имеет тривиальный деструктор, а
std::is_trivially_move_constructible_v<T> && std::is_trivially_move_assignable_v<T> является true.
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> &&
std::is_nothrow_move_constructible_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("Initially:");
std::println("x = {}", x);
std::println("y = {}", y);
std::println("Copy assignment copies data from x to y:");
y = x; // overload (1)
std::println("x = {}", x);
std::println("y = {}", y);
std::inplace_vector<std::string, 3> z, w{"\N{CAT}", "\N{GREEN HEART}"};
std::println("Initially:");
std::println("z = {}", z);
std::println("w = {}", w);
std::println("Move assignment moves data from w to z:");
z = std::move(w); // overload (2)
std::println("z = {}", z);
std::println("w = {}", w); // w is in valid but unspecified state
auto l = {4, 5, 6, 7};
std::println("Assignment of initializer_list {} to x:", l);
x = l; // overload (3)
std::println("x = {}", x);
std::println("Assignment of initializer_list with size bigger than N throws:");
try
{
x = {1, 2, 3, 4, 5}; // throws: (initializer list size == 5) > (capacity N == 4)
}
catch(const std::bad_alloc& ex)
{
std::println("ex.what(): {}", ex.what());
}
}
Возможный вывод:
Initially: x = [1, 2, 3] y = [] Copy assignment copies data from x to y: x = [1, 2, 3] y = [1, 2, 3] Initially: z = [] w = ["🐈", "💚"] Move assignment moves data from w to z: z = ["🐈", "💚"] w = ["", ""] Assignment of initializer_list [4, 5, 6, 7] to x: x = [4, 5, 6, 7] Assignment of initializer_list with size bigger than N throws: ex.what(): std::bad_alloc
См. также
создаёт inplace_vector (открытая функция-член) |
|
| присваивает значения контейнеру (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/inplace_vector/operator%3D