Spec-Zone.ru › C++

std::swap(std::optional)

Определено в заголовке <optional>
template< class T >
void swap( std::optional<T>& lhs,
           std::optional<T>& rhs ) noexcept(/* see below */);
(с C++17)
(до C++20)
template< class T >
constexpr void swap( std::optional<T>& lhs,
                     std::optional<T>& rhs ) noexcept(/* see below */);
(с C++20)

Перегружает алгоритм std::swap для std::optional. Обменивает состояние lhs с состоянием rhs. Эффективно вызывает lhs.swap(rhs).

Эта перегрузка участвует в разрешении перегрузки только если std::is_move_constructible_v<T> и std::is_swappable_v<T> оба являются true.

Параметры

lhs, rhs - объекты optional, состояния которых требуется поменять местами

Возвращаемое значение

(нет)

Исключения

noexcept спецификация:
noexcept(noexcept(lhs.swap(rhs)))

Пример

#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, тогда как необходимые операции могут быть constexpr в C++20 стал constexpr

См. также

swap
обмен содержимым
(общедоступный член-функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/optional/swap2

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API