std::variant<Types...>::swap
De cppreference.com
void swap( variant& rhs ) noexcept(/* véase más abajo */); |
(1) | (desde C++17) |
Intercambia dos objetos variantes.
- Si tanto
*this
comorhs
son sin valor debido a una excepción, no hace nada. - De lo contrario, si tanto
*this
comorhs
mantienen la misma alternativa, llamadas a swap(std::get<i>(*this), std:get<i>(rhs)) dondei
esindex()
. Si se lanza una excepción, el estado de los valores depende de la seguridad de excepción de la función de intercambio llamada. - De lo contrario, intercambia los valores de
rhs
y*this
. Si se lanza una excepción, el estado de*this
yrhs
depende de la seguridad de excepción del constructor de movimiento del variante.
El comportamiento está indefinido a menos que lvalues de tipo T_i
sean Swappable y std::is_move_constructible_v<T_i> sea true
para toda T_i
en Types...
Contenido |
[editar] Parámetros
rhs | - | Un objeto variante con el cual intercambiar. |
[editar] Valor de retorno
(Ninguno)
[editar] Excepciones
Si this->index() == rhs.index(), puede lanzar cualquier excepción lanzada por swap(std::get<i>(*this), std::get<i>(rhs)) con i siendo index().
De lo contrario, puede lanzar cualquier excepción lanzada por los constructores de movimiento de las alternativas actualmente mantenidas por *this y rhs.
Especificación noexcept: (desde C++11)
noexcept(((std::is_nothrow_move_constructible_v<Types> && std::is_nothrow_swappable_v<Types>) && ...)) |
||
[editar] Ejemplo
Ejecuta este código
#include <variant> #include <string> #include <iostream> int main() { std::variant<int, std::string> v1{2}, v2{"abc"}; std::visit([] (auto&& x) { std::cout << x << ' '; }, v1); std::visit([] (auto&& x) { std::cout << x << '\n'; }, v2); v1.swap(v2); std::visit([] (auto&& x) { std::cout << x << ' '; }, v1); std::visit([] (auto&& x) { std::cout << x << '\n'; }, v2); }
Salida:
2 abc abc 2