std::swap
Defined in header <algorithm> | (until C++11) | |
Defined in header <utility> | (since C++11) | |
(1) | ||
template<class T > void swap( T& a, T& b ); | (until C++11) | |
template<class T > void swap( T& a, T& b )noexcept(/* see below */); | (since C++11) (until C++20) | |
template<class T > constexprvoid swap( T& a, T& b )noexcept(/* see below */); | (since C++20) | |
(2) | ||
template<class T2, std::size_t N > void swap( T2 (&a)[N], T2 (&b)[N])noexcept(/* see below */); | (since C++11) (until C++20) | |
template<class T2, std::size_t N > constexprvoid swap( T2 (&a)[N], T2 (&b)[N])noexcept(/* see below */); | (since C++20) | |
Exchanges the given values.
a
and b
. This overload does not participate in overload resolution unless std::is_move_constructible_v<T>&&std::is_move_assignable_v<T> is true.(since C++17)a
and b
. In effect calls std::swap_ranges(a, a+N, b). This overload does not participate in overload resolution unless std::is_swappable_v<T2> is true.(since C++17)Contents |
[edit]Parameters
a, b | - | the values to be swapped |
Type requirements | ||
-T must meet the requirements of MoveAssignable and MoveConstructible. | ||
-T2 must meet the requirements of Swappable. |
[edit]Return value
(none)
[edit]Exceptions
(none) | (until C++11) |
noexcept specification: noexcept( std::is_nothrow_move_constructible<T>::value&& | (since C++11) |
noexcept specification: The lookup for the identifier noexcept(noexcept(swap(*a, *b))) swap in the exception specification finds this function template in addition to anything found by the usual lookup rules, making the exception specification equivalent to C++17 std::is_nothrow_swappable. | (until C++17) |
noexcept specification: noexcept(std::is_nothrow_swappable_v<T2>) | (since C++17) |
[edit]Complexity
[edit]Specializations
| (until C++20) |
The expected way to make a program-defined type swappable is to provide a non-member function swap in the same namespace as the type: see Swappable for details.
The following overloads are already provided by the standard library:
(C++11) | specializes the std::swap algorithm (function template) |
(C++11) | specializes the std::swap algorithm (function template) |
(C++11) | specializes the std::swap algorithm (function template) |
(C++11) | specializes the std::swap algorithm (function template) |
(C++11) | specializes the std::swap algorithm (function template) |
(C++11) | specializes the std::swap algorithm (function template) |
specializes the std::swap algorithm (function template) | |
(C++11) | specializes the std::swap algorithm (function template) |
specializes the std::swap algorithm (function template) | |
(C++11) | specializes the std::swap algorithm (function template) |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
(C++11) | specializes the std::swap() algorithm (function template) |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
specializes the std::swap algorithm (function template) | |
(C++11) | specializes the std::swap algorithm (function template) |
specializes the std::swap() algorithm (function template) | |
({{{1}}}) | specializes the std::swap algorithm (function) |
(C++11) | specialization of std::swap for unique_lock (function template) |
(C++11) | specializes the std::swap algorithm (function template) |
specializes the std::swap algorithm (function template) | |
(C++17) | specializes the std::swap algorithm (function) |
(C++17) | specializes the std::swap algorithm (function) |
(C++17) | specializes the std::swap algorithm (function) |
swaps two paths (function) |
[edit]Example
Output:
5 3 3 5
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 2554 | C++11 | swapping multi-dimensional arrays can never be noexcept due to name lookup problems | made to work |
[edit]See also
swaps the elements pointed to by two iterators (function template) | |
swaps two ranges of elements (function template) | |
(C++14) | replaces the argument with a new value and returns its previous value (function template) |