std::variant<Types...>:: swap
|
void
swap
(
variant
&
rhs
)
noexcept
(
/* siehe unten */
)
;
|
(seit C++17)
(constexpr seit C++20) |
|
Tauscht zwei
variant
Objekte aus.
- Wenn sowohl * this als auch rhs aufgrund einer Exception wertlos sind, erfolgt keine Aktion.
-
Andernfalls, wenn sowohl
*
this
als auch
rhs
dieselbe Alternative enthalten, wird
swap
(
*
std::
get_if
<
i
>
(
this
)
,
*
std::
get_if
<
i
>
(
std::
addressof
(
rhs
)
)
)
aufgerufen, wobei
i
gleich
index()ist. Falls eine Exception ausgelöst wird, hängt der Zustand der Werte von der Exception-Sicherheit der aufgerufenenswap-Funktion ab. - Andernfalls werden die Werte von rhs und * this ausgetauscht. Falls eine Exception ausgelöst wird, hängt der Zustand von * this und rhs von der Exception-Sicherheit des Move-Konstruktors des Variants ab.
Das Programm ist fehlerhaft, es sei denn, der Typ
T_i
ist
Swappable
und
std::
is_move_constructible_v
<
T_i
>
ist
true
für alle
T_i
in
Types...
.
Inhaltsverzeichnis |
Parameter
| rhs | - |
ein
variant
Objekt zum Austauschen
|
Rückgabewert
(keine)
Ausnahmen
Wenn
this
-
>
index
(
)
==
rhs.
index
(
)
, kann jede Ausnahme ausgelöst werden, die von
swap
(
*
std::
get_if
<
i
>
(
this
)
,
*
std::
get_if
<
i
>
(
std::
addressof
(
rhs
)
)
)
ausgelöst wird, wobei
i
gleich
index()
ist.
Andernfalls kann jede Ausnahme ausgelöst werden, die von den Move-Konstruktoren der aktuell in * this und rhs gehaltenen Alternativen ausgelöst wird.
std:: is_nothrow_swappable_v < Types > ) && ... ) )
Hinweise
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_variant
|
202106L
|
(C++20)
(DR) |
Vollständig
constexpr
std::variant
|
Beispiel
#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); }
Ausgabe:
2 abc abc 2
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| P2231R1 | C++20 |
swap
war nicht
constexpr
während nicht-triviale Destruktoren in C++20
constexpr
sein können
|
wurde constexpr gemacht |
Siehe auch
|
(C++17)
|
spezialisiert den
std::swap
Algorithmus
(Funktionsschablone) |