Espacios de nombres
Variantes
Acciones

std::optional<T>::swap

De cppreference.com
< cpp‎ | utility‎ | optional
 
 
Biblioteca de servicios
 
 
void swap( optional& other ) noexcept(/* véase más abajo */);
(desde C++17)

Intercambia el contenido con el de other.

  • Si ni *this ni other contienen un valor, esta función no tiene efecto.
  • Si solo uno de *this y other contiene un valor (llamemos a este objeto in y al otro un), el valor contenido de un es inicializado directamente desde std::move(*in), seguido por la destrucción del valor contenido de in como si lo fuera por in->T::~T(). Después de esta llamada, in no contiene un valor; un contiene un valor.
  • Si tanto *this como other contienen un valor, los valores contenidos se intercambian llamando a using std::swap; swap(**this, *other). Los lvalues T deben satisfacer a Swappable.

El programa está mal formado si std::is_move_constructible_v<T> es false.

Contenido

[editar] Parámetros

other - El objeto optional con el cual intercambiar el contenido.

[editar] Valor de retorno

(Ninguno)

[editar] Excepciones

Especificación noexcept:   (desde C++11)

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.

[editar] Ejemplo

#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.'

[editar] Véase también

Especializa el algoritmo std::swap.
(función) [editar]