c++ RVO优化机制(return value optimization)
测试了一段代码:RVO机制,将返回的类copy一个类的副本对象来保存返回的临时对象,就会调用一次临时构造函数,一次copy,一次析构。而通过c++编译器优化后,一些VS系列,则会以一次构造函数来来代替这个临时构造和析构。节省了系统资源
#include<iostream>
#include<vector>
using namespace std;
class Rational{
public:
Rational(int num=0,int demon=1):n(num),d(demon)
{
cout<<"Constructor called..."<<endl;
}
~Rational()
{
cout<<"d:"<<d<<" "<<"n:"<<n<<" ";
cout<<"Destructor called..."<<endl;
}
Rational(const Rational& rhs)
{
this->d=rhs.d;
this->n=rhs.n;
cout<<"copy construct called.."<<endl;
}
int num() const {return n;}
int demon() const {return d;}
private:
int n,d;
};
const Rational& operator*(const Rational& lhs,const Rational& rhs)
{
cout<<"————Enter operator*————"<<endl;
Rational tmp(lhs.num()*rhs.demon(),lhs.demon()*rhs.num());
cout<<"————Leave operator*————"<<endl;
return tmp;
}
int main()
{
Rational x(1,5),y(2,9);
const Rational &z=x*y;
cout<<"calc result: "<<z.num()<<"/"<<z.demon()<<endl;
//delete z;
return 0;
}