#include<iostream>
#include<string.h>
using namespace std;
class B{
private :int data;
public:
B(const B& a):data(a.data){
cout<<"copy construct ";
}
B(int i):data(i){
cout<<"constructed by parameter ";
}
B& operator=(const B &other){
//if(this==&other) return *this;
cout<<"fsfsfs";
}
};
B play (B b){
return b;
}
int main()
{
play(5);//constructed by parameter自动转型调用 copy construct return返回值时生成对象,局部b被释放 ,所以生成对象是由拷贝构造函数完成;
B temp=play(5);//constructed by parameter copy construct??????//不知道为什么这里不再执行一次拷贝,因为下面的d同样得创建就有调用;//可能是temp直接用了临时对象创建并初始化在外部存储的单元,所以不用再进行拷贝构造函数;
B d=temp;//调用拷贝构造函数
B c(5);
c=temp;//调用赋值函数
return 1;
}
//区别说明:赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。