std::tuple<Types...>::swap
Определено в заголовке <tuple> | ||
|---|---|---|
void swap( tuple& other ) noexcept(/* see below */); | (1) | (с C++11) (constexpr с C++20) |
constexpr void swap( const tuple& other ) noexcept(/* see below */) const; | (2) | (с C++23) |
Вызывает swap (которая может быть std::swap, или может быть найдена через ADL) для каждого элемента в *this и его соответствующего элемента в other.
| Если вызов любой выбранной | (до C++23) |
| Если вызов любой выбранной (std::is_swappable_v<Types> && ...) не является true. 2) Программа некорректна, если (std::is_swappable_v<const Types> && ...) не является true. | (с C++23) |
Параметры
| other | - | кортеж значений для обмена |
Возвращаемое значение
(нет)
Исключения
noexcept спецификация: noexcept(В выражении выше идентификатор | (до C++17) |
1) noexcept спецификация: noexcept((std::is_nothrow_swappable_v<Types> && ...))noexcept спецификация: noexcept((std::is_nothrow_swappable_v<const Types> && ...)) | (с C++17) |
Пример
#include <iostream>
#include <string>
#include <tuple>
int main()
{
std::tuple<int, std::string, float> p1{42, "ABCD", 2.71}, p2;
p2 = std::make_tuple(10, "1234", 3.14);
auto print_p1_p2 = [&](auto rem)
{
std::cout << rem
<< "p1 = {" << std::get<0>(p1)
<< ", " << std::get<1>(p1)
<< ", " << std::get<2>(p1) << "}, "
<< "p2 = {" << std::get<0>(p2)
<< ", " << std::get<1>(p2)
<< ", " << std::get<2>(p2) << "}\n";
};
print_p1_p2("Before p1.swap(p2): ");
p1.swap(p2);
print_p1_p2("After p1.swap(p2): ");
swap(p1, p2);
print_p1_p2("After swap(p1, p2): ");
}Вывод:
Before p1.swap(p2): p1 = {42, ABCD, 2.71}, p2 = {10, 1234, 3.14}
After p1.swap(p2): p1 = {10, 1234, 3.14}, p2 = {42, ABCD, 2.71}
After swap(p1, p2): p1 = {42, ABCD, 2.71}, p2 = {10, 1234, 3.14}Отчеты об ошибках
Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| LWG 2456 | C++11 | спецификация noexcept некорректна | исправлено |
См. также
|
(C++11) | специализация алгоритма std::swap (шаблон функции) |
|
(C++11) | обменивает содержимое (публичный член-функция std::pair<T1,T2>) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/tuple/swap