gpt4 book ai didi

c++ - 为什么assign前要有copy?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:06 24 4
gpt4 key购买 nike

我正在做以下测试:

#include <iostream>
#include <vector>

using namespace std;
class A
{
private:
int i;
public:
A():i(1){cout<<"A constr"<<endl;}
A(const A & a):i(a.i){cout<<"A copy"<<endl;}
virtual ~A(){cout<<"destruct A"<<endl;}
void operator=(const A a){cout<<"A assign"<<endl;}
};


int main()
{
A o1;
A o2;
o2=o1;
}

输出是:

A constr
A constr
A copy
A assign
destruct A
destruct A
destruct A

好像“o2=o1”是先复制后赋值,不知道这背后的故事是什么。谢谢!

最佳答案

因为您按值传递给赋值运算符:

void operator=(const A a)

您可能打算通过引用传递并且您还应该返回对分配给对象的引用:

A& operator=(const A& a) { std::cout << "A assign" << std::endl; return *this; }

关于c++ - 为什么assign前要有copy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9806435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com