Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>:: swap

From cppreference.net
std::basic_string
void swap ( basic_string & other ) ;
(hasta C++17)
void swap ( basic_string & other ) noexcept ( /* see below */ ) ;
(desde C++17)
(constexpr desde C++20)

Intercambia el contenido de la cadena con el de other . Todos los iteradores y referencias pueden quedar invalidados.

Si std:: allocator_traits < allocator_type > :: propagate_on_container_swap :: value es true , entonces los allocators se intercambian mediante una llamada no calificada a la función no-miembro swap . De lo contrario, no se intercambian (y si get_allocator ( ) ! = other. get_allocator ( ) , el comportamiento es indefinido).

(desde C++11)

Contenidos

Parámetros

other - cadena con la cual intercambiar contenidos

Complejidad

Constante.

Excepciones

No se lanza ninguna excepción.

(until C++11)

No se lanza ninguna excepción, a menos que el comportamiento sea indefinido.

Si se lanza una excepción por cualquier motivo, esta función no tiene efecto ( garantía de seguridad de excepciones fuerte ).

(since C++11)


noexcept especificación:
noexcept ( std:: allocator_traits < Allocator > :: propagate_on_container_swap :: value ||
std:: allocator_traits < Allocator > :: is_always_equal :: value )
(desde C++17)

Ejemplo

#include <iostream>
#include <string>
int main() 
{
    std::string a = "AAA";
    std::string b = "BBBB";
    std::cout << "Before swap:\n"
                 "a = " << a << "\n"
                 "b = " << b << "\n\n";
    a.swap(b);
    std::cout << "After swap:\n"
                 "a = " << a << "\n"
                 "b = " << b << '\n';
}

Salida:

Before swap:
a = AAA
b = BBBB
After swap:
a = BBBB
b = AAA

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
LWG 403 C++98 swap() podría lanzar una excepción no se lanza ninguna excepción
LWG 535 C++98 el intercambio de strings no preservaba el orden de caracteres los órdenes también se preservan
LWG 2151
( P1148R0 )
C++11 no se lanzaba excepción en el caso
de allocators no propagadores desiguales
el comportamiento es
indefinido en este caso

Véase también

intercambia los valores de dos objetos
(plantilla de función)
intercambia dos rangos de elementos
(plantilla de función)
intercambia los contenidos
(función miembro pública de std::basic_string_view<CharT,Traits> )