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 의 내용을 대체합니다.

1) 복사 할당 연산자 . 또한 trivial 복사 할당 연산자 이며, 이는 std:: inplace_vector < T, N > trivial 소멸자 를 가지고, 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) * this other 의 크기에 선형적으로 비례합니다.
3) * this init 의 크기에 선형적입니다.

예외

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("N보다 큰 크기의 initializer_list 할당은 예외를 발생시킵니다:");
    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]
N보다 큰 크기의 initializer_list 할당은 예외를 발생시킵니다:
ex.what(): std::bad_alloc

참고 항목

inplace_vector 를 생성한다
(public member function)
컨테이너에 값을 할당한다
(public member function)