C++标准库中的swap函数是如何能拷贝private对象的?

代码如下:

#include <iostream>
#include <utility>

using namespace std;

class A {
public:
    A(int a):i(a) {}
    int getI() { return i; }
private:
    int i;
};

int main()
{
    A a(15),b(51);
    cout<<a.getI()<<endl;
    cout<<b.getI()<<endl;
    std::swap(a,b);
    cout<<a.getI()<<endl;
    cout<<b.getI()<<endl;
    
    return 0;
}

输出结果:

15
51
51
15

iprivate 的,我又没有为 swap 定义友元,为什么标准库中的 swap 函数能交换 i

阅读 1.7k
1 个回答

因为默认的赋值运算符已经帮你做了,就你这个类而言,它的默认实现基本是下面这样的,

A& operator=(const A& a)
{
    this->i = a.i;
}

这部分内容在 C++ primer plus 都是有介绍的,你可以再复习下你的学习书籍。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题