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 |
См. также
| обмен содержимым (общедоступный член-функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/optional/swap2