std::variant<Types...>::swap
void swap( variant& rhs ) noexcept(/* see below */);
|
(desde C++17) (constexpr desde C++20) |
|
Intercambia dos objetos variant.
- Si tanto
*thiscomorhsestán sin valor por excepción, no hace nada. - De lo contrario, si tanto
*thiscomorhstienen la misma alternativa, llama aswap(*std::get_if<i>(this), *std::get_if<i>(std::addressof(rhs)))dondeiesindex(). Si se lanza una excepción, el estado de los valores depende de la seguridad ante excepciones de la funciónswapllamada. - De lo contrario, intercambia los valores de
rhsy*this. Si se lanza una excepción, el estado de*thisyrhsdepende de la seguridad ante excepciones del constructor de movimiento de variant.
El programa está mal formado a menos que el tipo T_i sea Intercambiable y std::is_move_constructible_v<T_i> sea true para todo T_i en Types....
Parámetros
| rhs | - |
un objeto
variant
para intercambiar con
|
Valor de retorno
(ninguno)
Excepciones
Si
this
-
>
index
(
)
==
rhs.
index
(
)
, puede lanzar cualquier excepción lanzada por
swap
(
*
std::
get_if
<
i
>
(
this
)
,
*
std::
get_if
<
i
>
(
std::
addressof
(
rhs
)
)
)
con
i
siendo
index()
.
De lo contrario, puede lanzar cualquier excepción lanzada por los constructores de movimiento de las alternativas actualmente contenidas en * this y rhs .
std:: is_nothrow_swappable_v < Types > ) && ... ) )
Notas
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_variant
|
202106L
|
(C++20)
(DR) |
Completamente
constexpr
std::variant
|
Ejemplo
#include <iostream> #include <string> #include <variant> 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
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| P2231R1 | C++20 |
swap
no era
constexpr
mientras que los destructores no triviales pueden ser
constexpr
en C++20
|
hecho constexpr |
Véase también
|
(C++17)
|
especializa el algoritmo
std::swap
(plantilla de función) |