std::swap(std::optional)
Материал из cppreference.com
Определено в заголовочном файле <optional>
|
||
template< class T > void swap( std::optional<T>& lhs, |
(начиная с C++17) (до C++20) |
|
template< class T > constexpr void swap( std::optional<T>& lhs, |
(начиная с 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("Изначально:"); std::swap(a, b); print("swap(a, b):"); a.reset(); print("\n""a.reset():"); std::swap(a, b); print("swap(a, b):"); }
Вывод:
Изначально: a = ██████ b = ▒▒▒▒▒▒ swap(a, b): a = ▒▒▒▒▒▒ b = ██████ a.reset(): a = (null) b = ██████ swap(a, b): a = ██████ b = (null)
[править] Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
Номер | Применён | Поведение в стандарте | Корректное поведение |
---|---|---|---|
WG не указан | C++20 | swap не была constexpr, в то время как необходимые операции могут бытьconstexpr в C++20 |
сделана constexpr |
[править] Смотрите также
обменивает содержимое (public функция-элемент) |