Namespaces
Variants

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

Depuis fr.cppreference.net
 
 
 
std::basic_string
 
void swap( basic_string& other );
(jusqu'à C++17)
void swap( basic_string& other ) noexcept(/* see below */);
(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 en utilisant un appel non qualifié à swap non membre. Sinon, ils ne sont pas échangés (et si get_allocator() != other.get_allocator(), le comportement est indéfini).

(depuis C++11)

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 & objet fonction d'algorithme)
échange le contenu
(fonction membre publique de std::basic_string_view<CharT,Traits>)