Namespaces
Variants

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

From cppreference.net
std::basic_string
void swap ( basic_string & other ) ;
(до C++17)
void swap ( basic_string & other ) noexcept ( /* см. ниже */ ) ;
(начиная с C++17)
(constexpr начиная с C++20)

Обменивает содержимое строки с содержимым other . Все итераторы и ссылки могут стать недействительными.

Если std:: allocator_traits < allocator_type > :: propagate_on_container_swap :: value равно true , то аллокаторы обмениваются с помощью неквалифицированного вызова нечленной функции swap . В противном случае они не обмениваются (и если get_allocator ( ) ! = other. get_allocator ( ) , поведение не определено).

(начиная с C++11)

Содержание

Параметры

other - строка для обмена содержимым

Сложность

Константа.

Исключения

Исключения не выбрасываются.

(until C++11)

Исключения не выбрасываются, если поведение не является неопределенным.

Если исключение выбрасывается по любой причине, эта функция не имеет эффекта ( гарантия строгой безопасности исключений ).

(since C++11)


noexcept спецификация:
noexcept ( std:: allocator_traits < Allocator > :: propagate_on_container_swap :: value ||
std:: allocator_traits < Allocator > :: is_always_equal :: value )
(начиная с C++17)

Пример

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

Вывод:

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

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены задним числом к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 403 C++98 swap() может выбрасывать исключение исключения не выбрасываются
LWG 535 C++98 обмен строками не сохранял порядок символов порядок также сохраняется
LWG 2151
( P1148R0 )
C++11 исключение не выбрасывалось в случае
неравных непропагирующих аллокаторов
поведение является
неопределённым в этом случае

Смотрите также

обменивает значения двух объектов
(шаблон функции)
обменивает два диапазона элементов
(шаблон функции)
обменивает содержимое
(публичная функция-член std::basic_string_view<CharT,Traits> )