C++和C语言相比,最为人诟病的就是其性能问题,通常一条C语言经编译器解释后,可以固定转换成5—10条汇编语言,但是一条C++语言,就没有这么幸运了,可能会是3条汇编语言,也可能是300条。C++影响性能的原因很多,其中一个就是临时对象的创建和销毁。这里我简述一种减少创建临时对象的方法--返回值优化问题
很多时候,函数需要按值返回,这其中就会不可避免地涉及到临时对象的创建和销毁。假设定义如下的Complex类:
class Complex
{
friend Complex operator +(const Complex&,const Complex&);
public:
Complex(double r=0, double i=0):real(r),imag(i)
{
cout<<"I'm in constructor"<<endl;
}
Complex(const Complex& c):real(c.real),imag(c.imag)
{
cout<<"I'm in copy constructor"<<endl;
}
Complex& operator =(const Complex& c)
{
real=c.real;
imag=c.imag;
cout<<"I'm in assignment"<<endl;
return *this;
}
void print()
{
cout<<real<<"+"<<imag<<"i"<<endl;
}
~Complex()
{
cout<<"I'm in destructor"<<endl;
}
private:
double real;
double imag;
};
Complex operator +(const Complex& a,const Complex& b)
{
/*Complex retVal;
retVal.real=a.real+b.real;
retVal.imag=a.imag+b.imag;
return retVal;*/
cout<<"calling plus"<<endl;
// return Complex(a.real+b.real,a.imag+b.imag);
Complex retVal(a.real+b.real,a.imag+b.imag);
return retVal;
}