#include<iostream>
using namespace std;
class Data
{
public:
Data()
{
cout<<"Data()"<<endl;
}
Data(const Data & d)
{
cout<<"Data(const Data &d)"<<endl;
}
Data& operator=(const Data& d)
{
cout<<"Data& operator=(const Data& d)"<<endl;
return *this;
}
~Data()
{
cout<<"~Data"<<endl;
}
};
//传参
void Func1(Data d)
{
}
int main()
{
Data d1;
Func1(d1);
}
运行结果:
[zyc@localhost anonymize]$ ./a.out
Data()
Data(const Data &d)
~Data
~Data
//传引用
void Func2(Data &d)
{
}
int main()
{
Data d1;
Func2(d1);
}
运行结果:
[zyc@localhost anonymize]$ ./a.out
Data()
~Data
//传值返回
Data Func3()
{
Data d;
return d;
}
int main()
{
Func3();
return 0;
}
运行结果:
[zyc@localhost anonymize]$ ./a.out
Data()
Data(const Data& d)
~Data
~Data
匿名对象与普通对象对比‘
int main()
{
Data d1;
Data();
return 0;
}
运行结果
[zyc@localhost anonymize]$ ./a.out
Data()
Data()
~Data
~Data
匿名对象与普通自定义类型比较:
匿名对象生命周期短,调完构造,立马调用拷贝构造
匿名对象传参会被优化
int main()
{
Func1(Data());
return 0;
}
[zyc@localhost anonymize]$ ./a.out
Data()
~Data
//传值返回
Data Func3()
{
return Data();
}
int main()
{
Func3();
return 0;
}
[zyc@localhost anonymize]$ ./a.out
Data()
~Data
匿名对象对返回值也会被优化
优化:传值优化
传参优化
接受返回值