Namespaces
Variants

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

From cppreference.net
std::basic_string
void swap ( basic_string & other ) ;
(jusqu'à C++17)
void swap ( basic_string & other ) noexcept ( /* voir ci-dessous */ ) ;
(depuis C++17)
(constexpr depuis C++20)

Échange le contenu de la chaîne avec celui de other . Tous les itérateurs et références peuvent être invalidés.

Si std:: allocator_traits < allocator_type > :: propagate_on_container_swap :: value est true , alors les allocateurs sont échangés via un appel non qualifié à la fonction non-membre swap . Sinon, ils ne sont pas échangés (et si get_allocator ( ) ! = other. get_allocator ( ) , le comportement est indéfini).

(depuis C++11)

Table des matières

Paramètres

autre - chaîne avec laquelle échanger le contenu

Complexité

Constante.

Exceptions

Aucune exception n'est levée.

(until C++11)

Aucune exception n'est levée, sauf si le comportement est indéfini.

Si une exception est levée pour quelque raison que ce soit, cette fonction n'a aucun effet ( garantie de sécurité d'exception forte ).

(since C++11)


noexcept spécification :
noexcept ( std:: allocator_traits < Allocator > :: propagate_on_container_swap :: value ||
std:: allocator_traits < Allocator > :: is_always_equal :: value )
(depuis C++17)

Exemple

#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';
}

Sortie :

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

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 403 C++98 swap() pouvait lever une exception aucune exception n'est levée
LWG 535 C++98 l'échange de chaînes ne préservait pas l'ordre des caractères les ordres sont également préservés
LWG 2151
( P1148R0 )
C++11 aucune exception n'était levée dans le cas
d'allocateurs non propagants inégaux
le comportement est
indéfini dans ce cas

Voir aussi

échange les valeurs de deux objets
(modèle de fonction)
échange deux plages d'éléments
(modèle de fonction)
échange le contenu
(fonction membre publique de std::basic_string_view<CharT,Traits> )