◐ Shell
clean mode source ↗

std::swap - cppreference.com

特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数模板) [编辑] 特化 std::swap 算法
(函数) [编辑] 特化 std::swap 算法
(函数) [编辑] 特化 std::swap 算法
(函数) [编辑] 特化 std::swap 算法
(函数) [编辑] 特化 std::swap 算法
(函数) [编辑] 特化 std::swap 算法
(函数) [编辑]
#include <algorithm>
#include <iostream>
 
namespace Ns
{
    class A
    {
        int id {};
 
        friend void swap(A& lhs, A& rhs)
        {
            std::cout << "swap(" << lhs << ", " << rhs << ")\n";
            std::swap(lhs.id, rhs.id);
        }
 
        friend std::ostream& operator<< (std::ostream& os, A const& a)
        {
            return os << "A::id=" << a.id;
        }
    
    public:
        A(int i) : id{i} {}
        A(A const&) = delete;
        A& operator = (A const&) = delete;
    };
}
 
int main()
{
    int a = 5, b = 3;
    std::cout << a << ' ' << b << '\n';
    std::swap(a, b);
    std::cout << a << ' ' << b << '\n';
    
    Ns::A p{6}, q{9};
    std::cout << p << ' ' << q << '\n';
//  std::swap(p, q);  // 错误,不满足类型要求
    swap(p, q);       // OK:实参依赖查找找到了合适的友元 swap
    std::cout << p << ' ' << q << '\n';
}

输出:

5 3
3 5
A::id=6 A::id=9
swap(A::id=6, A::id=9)
A::id=9 A::id=6