我禁用g ++返回值优化后,为什么最后调用构造函数进行临时引用?

时间:2012-08-06 02:54:08

标签: g++ compiler-optimization

我使用follow命令编译c ++代码以禁用返回值  g++ -fno-elide-constructors rvoptimazation.cpp -o test
但是./test的输出是
10个
10个
10个
13个
0xbfdf0020
13个
我对构造函数的最后一次调用感到困惑。任何人都可以解释在运算符*返回后代码的哪一行将调用构造函数?提前致谢。

#include<iostream>    

using namespace std;  

class Rational{  
public:  
    Rational(int x ,int y){  
        _a = x;  
        _b = y;  
        cout << __LINE__ << endl;  
    }  
    Rational(Rational const &t){  
        cout << __LINE__ << endl;  
    }  
    Rational operator*(Rational const &t){  
        Rational re = Rational(_a * t._a ,_b * t._b);  
        cout << &re << endl;  
        return re;  
        //return *this;  
    }  
    Rational get()  
    {  
        return *this;  
    }  
public:  
    int _a ,_b;  
};  

int main()  
{  
    Rational r1(1 ,2);  
    Rational r2(2 ,3);  
    r1 * r2;  
 // cout << &r3 << endl;  
}  

1 个答案:

答案 0 :(得分:1)

operator*按值返回,因此必须构造返回的对象。语句return re调用复制构造函数来执行此操作。

我认为Return value optimization的解释非常明确。