optional_swap2

optional_swap2 (std::optional용 std::swap 오버로드)

이 페이지는 std::optional에 대한 std::swap 함수 오버로드를 설명해요. 이 함수는 두 std::optional 객체의 상태를 서로 교환하는 역할을 해요. C++17부터 사용할 수 있고, C++20부터는 constexpr로 동작해요.

출처: cppreference

본문

<optional> 헤더에 정의되어 있어요. 이 오버로드는 std::optional 타입에 대해 std::swap 알고리즘을 적용할 수 있게 해줘요. lhsrhs의 상태를 교환하며, 실제로는 lhs.swap(rhs)를 호출하는 것과 동일해요.

이 오버로드는 std::is_move_constructible_v<T>std::is_swappable_v<T>가 모두 true일 때만 오버로드 해석에 참여해요.

매개변수

lhs, rhs - 상태를 교환할 optional 객체들

반환값

없음

예외

  • noexcept(noexcept(lhs.swap(rhs)))

참고

기능 테스트 매크로 표준 기능
__cpp_lib_optional 202106L (C++20) (DR20) 완전한 constexpr

예제

#include <iostream>
#include <optional>
#include <string>

int main()
{
    std::optional<std::string> a{"██████"}, b{"▒▒▒▒▒▒"};

    auto print = [&](auto const& s)
    {
        std::cout << s << "\t"
                     "a = " << a.value_or("(null)") << "  "
                     "b = " << b.value_or("(null)") << '\n';
    };

    print("Initially:");
    std::swap(a, b);
    print("swap(a, b):");
    a.reset();
    print("\n""a.reset():");
    std::swap(a, b);
    print("swap(a, b):");
}

출력:

Initially:   a = ██████  b = ▒▒▒▒▒▒
swap(a, b):  a = ▒▒▒▒▒▒  b = ██████

a.reset():   a = (null)  b = ██████
swap(a, b):  a = ██████  b = (null)

결함 보고서

다음의 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었어요.

DR 적용 대상 발표된 동작 올바른 동작
P2231R1 C++20 swapconstexpr가 아니었지만, 필요한 연산은 C++20에서 constexpr가 될 수 있었음 constexpr로 만듦

같이 보기

swap 내용을 교환한다 (공용 멤버 함수) [편집]

더 알아보기 (Learn more)

cppreference