1.匿名对象
1.1 匿名对象是什么
匿名对象就是用类实例化一个没有名字的对象。
A(10);//初始化时没有名字
A为类名,上面就构造了一个匿名对象。
1.2 匿名对象的特性
1.匿名对象的生命周期为匿名对象创建的那一行,出了那一行就会销毁。
2.匿名对象具有常性
必须加上const
3.匿名对象被引用生命周期会延长
#include<iostream>
using namespace std;
class A
{
public:
A(int t=0)
:m(t)
{
cout << "A()的构造" << endl;
}
~A()
{
cout << "~A()的析构" << endl;
}
private:
int m;
};
int main()
{
const A& d = A(10);
return 0;
}
2.拷贝构造时编译器的一些优化
2.1 构造+拷贝构造
初始化x时,这里发生了隐式类型转换,即编译器先通过2023构造了一个临时对象,在将临时对象拷贝构造给x。这里有些编译器会优化成一步,直接用2023构造x。
如果是上面这样,编译器就不会优化,因为此时是构造+赋值。
2.2 拷贝构造+拷贝构造
这里函数返回时会拷贝构造一个临时变量,在将临时变量拷贝构造给x。有些编译器会一步优化为返回值直接拷贝构造给x。