函数的调用优化:
优化前:
函数:
Test (Test x) //1.实参传值形参,调动拷贝构造函数
{
int value = x.GetData();
Test tmp(value); //2.创建一个局部对象,调用构造函数
return tmp; //3.创建一个临时对象返回,调用拷贝构造函数
}
调用:
Test t1(100);
Test t2; //4.创建t2对象,调用构造函数
t2 = fun(t1); //5.调用赋值函数给t2赋值
Test fun(Test &x) //形参引用实参
{
}
调用:
Test t1(100);
Test t2 = fun(t1); //1.最终只是创建一个t2对象,fun()的无名临时对象将不会创建
优化结果:
1.减少了四次调用
2.一个函数能不能以引用返回,看引用的对象是不是局部对象,如果是局部对象,则不能引用,因为局部对象会在当前函数结束时被释放。只有当被引用的对象不受当前函数限制时,才可以以引用返回
优化前:
函数:
Test (Test x) //1.实参传值形参,调动拷贝构造函数
{
int value = x.GetData();
Test tmp(value); //2.创建一个局部对象,调用构造函数
return tmp; //3.创建一个临时对象返回,调用拷贝构造函数
}
调用:
Test t1(100);
Test t2; //4.创建t2对象,调用构造函数
t2 = fun(t1); //5.调用赋值函数给t2赋值
优化后:
Test fun(Test &x) //形参引用实参
{
int value = x.GetData();
}
调用:
Test t1(100);
Test t2 = fun(t1); //1.最终只是创建一个t2对象,fun()的无名临时对象将不会创建
优化结果:
1.减少了四次调用
2.一个函数能不能以引用返回,看引用的对象是不是局部对象,如果是局部对象,则不能引用,因为局部对象会在当前函数结束时被释放。只有当被引用的对象不受当前函数限制时,才可以以引用返回