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 알고리즘을 적용할 수 있게 해줘요. lhs와 rhs의 상태를 교환하며, 실제로는 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 | swap은 constexpr가 아니었지만, 필요한 연산은 C++20에서 constexpr가 될 수 있었음 |
constexpr로 만듦 |
같이 보기
swap |
내용을 교환한다 (공용 멤버 함수) [편집] |
|---|