std::optional<T>::swap
De cppreference.com
<tbody>
</tbody>
void swap( optional& other ) noexcept(/* véase más abajo */); |
(desde C++17) | |
Intercambia el contenido con el de other.
- Si ni
*thisniothercontienen un valor, esta función no tiene efecto.
- Si solo uno de
*thisyothercontiene un valor (llamemos a este objetoiny al otroun), el valor contenido deunes inicializado directamente desdestd::move(*in), seguido por la destrucción del valor contenido deincomo si lo fuera porin->T::~T(). Después de esta llamada,inno contiene un valor;uncontiene un valor.
- Si tanto
*thiscomoothercontienen un valor, los valores contenidos se intercambian llamando ausing std::swap; swap(**this, *other). Los lvaluesTdeben satisfacer a Swappable.
El programa está mal formado si std::is_move_constructible_v<T> es false.
Parámetros
| other | - | El objeto optional con el cual intercambiar el contenido.
|
Valor de retorno
(Ninguno)
Excepciones
Especificación noexcept: (desde C++11)
<tbody>
</tbody>
noexcept(std::is_nothrow_move_constructible_v<T> && std::is_nothrow_swappable_v<T>) |
||
En el caso que se lance una excepción, los estados de los valores contenidos de *this y other se determinan por las garantías de seguridad de swap de tipo T o el constructor de movimiento de T, el que se haya llamado. Tanto para *this como para other, si el objeto contenía un valor, se deja que contenga un valor y viceversa.
Ejemplo
Ejecuta este código
#include <iostream>
#include <string>
#include <optional>
int main()
{
std::optional<std::string> opt1("Primer texto ejemplo");
std::optional<std::string> opt2("Segundo texto");
auto imprimir_opcionales = [&](const char* titulo) {
std::cout << titulo << ":\n";
std::cout << "opt1 contiene '" << opt1.value_or("") << "'\n";
std::cout << "opt2 contiene '" << opt2.value_or("") << "'\n";
};
imprimir_opcionales("Antes del intercambio");
std::cout << "---INTERCAMBIO---\n";
opt1.swap(opt2);
imprimir_opcionales("Después del intercambio");
std::cout << '\n';
// Intercambiar con solo un conjunto
opt1 = "Lorem ipsum dolor sit amet, consectetur tincidunt.";
opt2.reset();
imprimir_opcionales("Antes del intercambio");
std::cout << "---INTERCAMBIO---\n";
opt1.swap(opt2);
imprimir_opcionales("Después del intercambio");
}
Salida:
Antes del intercambio:
opt1 contiene 'Primer texto ejemplo'
opt2 contiene 'Segundo texto'
---INTERCAMBIO---
Después del intercambio:
opt1 contiene 'Segundo texto'
opt2 contiene 'Primer texto ejemplo'
Antes del intercambio:
opt1 contiene 'Lorem ipsum dolor sit amet, consectetur tincidunt.'
opt2 contiene ''
---INTERCAMBIO---
Después del intercambio:
opt1 contiene ''
opt2 contiene 'Lorem ipsum dolor sit amet, consectetur tincidunt.'
Véase también
(C++17) |
Especializa el algoritmo std::swap. (función) |