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(
noexcept(swap(std::declval<T0&>>(), std::declval<T0&>())) &&
noexcept(swap(std::declval<T1&>>(), std::declval<T1&>())) &&
noexcept(swap(std::declval<T2&>>(), std::declval<T2&>())) &&
...
)
В приведённом выше выражении идентификатор | (до C++17) |
| 1)
Спецификация 2) 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/cpp/utility/tuple/swap