#include<bits/stdc++.h>
using namespace std;
class numbered{
public:
int value;
numbered(){}
numbered& operator= (const numbered& n){
this->value=n.value+1;
return *this;
}
numbered (const numbered& n){
this->value=n.value+2;
}
};
int main(void){
numbered n1;
n1.value=15;
numbered n2=n1;
numbered n3;
n3=n1;
cout << n2.value <<endl;
cout << n3.value <<endl;
return 0;
}在此代码段之上,为什么numbered n2=n1调用复制构造函数而numbered3 n3;n3=n1;调用复制赋值操作符.n2和n3这两个变量都由=分配。那么,它们之间有什么区别呢?
发布于 2022-02-22 05:50:57
报表1
当你写到:
numbered n2 = n1; //this is initialization and so this uses copy constructor上面的语句是使用变量initialization的变量n2的n1。来自复制构造函数的文档
每当一个对象被初始化为(通过直接初始化或复制初始化)来自同一类型的另一个对象时,就调用复制构造函数.
由于在本例中我们正在进行初始化,因此根据上面引用的语句,这将使用复制构造函数。
报表2
另一方面,当你写道:
n3=n1; //this is assignment expression and so this uses copy assignment operator上面的语句是赋值 of n1 to n3。来自副本分配操作员的文件
每当通过过载解析选择复制赋值操作符时,都会调用该操作符,例如,当一个对象出现在赋值表达式的左侧时,即为。
由于对象n3出现在赋值表达式的左侧,因此根据上面引用的语句,这将使用复制赋值操作符。
https://stackoverflow.com/questions/71216428
复制相似问题