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

来自cppreference.com
 
 
 
 
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 移动到这个容器中)。此后 other 处于有效但未指明的状态。
3) 以初始化式列表 init 指定的内容替换内容。

参数

other - 用作初始化容器元素的来源的另一个 inplace_vector
init - 用以初始化容器元素的初始化式列表

复杂度

1,2)*thisother 的大小成线性。
3)*thisinit 的大小成线性。

异常

2)
noexcept 说明:  
noexcept(N == 0 ||

        (std::is_nothrow_move_assignable_v<T> &&

         std::is_nothrow_move_constructible_v<T>))
3)init.size() > N 时抛出 std::bad_alloc

示例

#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("用大小大于 N 的 initializer_list 的赋值抛出异常:");
    try
    {
        x = {1, 2, 3, 4, 5}; // 当 (initializer list size == 5) > (capacity 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]
用大小大于 N 的 initializer_list 的赋值抛出异常:
ex.what(): std::bad_alloc

参阅

构造 inplace_vector
(公开成员函数)
将值赋给容器
(公开成员函数)