gpt4 book ai didi

c++ - 为什么赋值运算符同时调用复制构造函数和赋值运算符?

转载 作者:行者123 更新时间:2023-11-30 00:45:16 26 4
gpt4 key购买 nike

这是我的代码,我希望输出“Assignment”但同时获得“copy”和“Assignment”。

#include <iostream>
using namespace std;

class Test
{
public:
Test(){}
Test(Test &t){ cout<<"\n copy ";}
void operator = (Test t) {cout<<"\n Assignment ";}
};

void main()
{
Test t1; //default ctor
Test t3;
t3=t1; //Assignment
}

如果我将代码更改为

void operator = (Test &t) {cout<<"\n Assignment ";}

我只得到预期的输出“作业”。

两者有什么区别?

最佳答案

区别在于参数 Test t 通过 t 按值。这会调用复制构造函数来创建一个单独的本地拷贝,您可以在函数中使用该拷贝。

当您使用 Test &t(注意它应该const Test &t)时,您传递的是对原始值的引用,从而避免复制。

注意事项:

  • 赋值运算符的正确签名是这样的(通过return *this;满足返回值):

    Test & operator = (const Test &t);
  • 复制构造函数的正确签名是这样的:

    Test(const Test &t);

关于c++ - 为什么赋值运算符同时调用复制构造函数和赋值运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43883901/

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