c++ RVO...未定义或未命名对象优化机制
测试了一段代码: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; }
后续添加说明。。