Namespaces
Variants

std::inplace_vector<T,N>:: operator=

From cppreference.net
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 .

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 спецификация:
3) Выбрасывает std::bad_alloc если init. size ( ) > N .

Пример

#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)