gpt4 book ai didi

c++ - 为什么复制赋值运算符的参数应该是引用?

转载 作者:太空狗 更新时间:2023-10-29 21:43:43 26 4
gpt4 key购买 nike

“opperator= should takes a parametor of the (of course,const best) ref of src obj”,我在很多书中都看到了这一点,但我尝试使用 non-ref 来代替,它也有效!所以,这是什么使用 ref 的目的是为了避免从参数中复制?我的测试代码是,

#include <iostream>
#include <string>
using namespace std;

class Student{
public:
Student& operator=(Student);
string name;
int num;
};

Student& Student::operator=(Student s)
{
name=s.name;
num=s.num;
return *this;
}

int main(){
Student src;
src.name="haha";
src.num=11;
cout<<src.name<<" "<<src.num<<endl;
Student dst=src;
cout<<src.name<<" "<<src.num<<endl;
}

最佳答案

这里确实有两个问题:

1) 您定义的复制赋值运算符不会被调用。线路

Student dst=src;

不调用复制赋值运算符!它调用由编译器隐式定义的复制构造函数。然而,如果你写了

Student dst;
dst = src;

然后将调用 operator=

2) 是的,目的是避免抄袭。当您调用函数时,包括 operator=,它按值获取 Student,必须复制 Student 对象参数(通过隐式调用复制构造函数)。另一方面,如果函数采用引用,则不会进行任何复制。

关于c++ - 为什么复制赋值运算符的参数应该是引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22123339/

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