我使用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;
}
答案 0 :(得分:1)
operator*
按值返回,因此必须构造返回的对象。语句return re
调用复制构造函数来执行此操作。
我认为Return value optimization的解释非常明确。