###Return value optimization
我们知道,在函数内如果需要以value方式返回对象,那么需要生成临时匿名对象,然后以这个临时对象去通过copy构造函数生成新的对象,最后调用析构函数销毁对象
A method(){
...
A temp;
...
return temp;
}
然而经过测试,这个过程已经被编译器优化了,这个过程叫做return value optimization,1996年ISO/ANSI委员会宣布,匿名对象和命名对象均可以通过这个方式优化,所以我们会看到编译器会直接以返回值作为参数通过构造函数构造新的对象,不再生成临时对象,代码如下:
#include <iostream>
using namespace std;
class Rational{
public:
Rational(int numer = 0,int denominator=1){
cout<<"Constructor...\n";
this->_numer = numer;
this->_denom = denominator;
}
Rational(const Rational& r){
cout<<"Copy constructor...\n";
}
int numerator() const;
int denominator() const;
const Rational operator*(const Rational& rhs){
return Rational(this->numerator()*rhs.numerator(),this->denominator()*rhs.denominator());
}
friend const Rational operator*(const Rational& lhs,const Rational& rhs){
cout<<"Operation * ...\n";
return Rational(lhs.numerator()*rhs.numerator(),lhs.denominator()*rhs.denominator());
}
~Rational(){
cout<<"Destructor...\n";
}
private:
int _numer;
int _denom;
};
int Rational::numerator() const{
return this->_numer;
}
int Rational::denominator() const{
return this->_denom;
}
void Testing(){
Rational a = 10;
Rational b(1,2);
Rational c = a*b;
}
int main()
{
Testing();
system("pause");
return 0;
}
###Testing