Namespaces
Variants

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

С сайта ru.cppreference.net
 
 
 
std::basic_string
 
void swap( basic_string& other );
(до C++17)
void swap( basic_string& other ) noexcept(/* see below */);
(начиная с 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>)