1.一个简单的demo
class YY
{
public:
YY(int data = 1):Data(data) {};
bool operator== (const class YY& y)const
{
return Data == y.Data;
}
int Data;
};
class XX
{
public:
operator class YY()const { return YY(20); }
XX getvalue() { return *this; }
};
int main()
{
XX x;
YY y(20);
if (y == (x.getvalue()))
{
cout << "Yes" << endl;
}
return 0;
}
①y == (x.getvalue()) 第一次会被决议为 y.operator==(( x.getvalue() ))
②但是x.getvalue()返回的是一个XX的对象,需要转化为一个YY的对象,必须施行于getvalue的返回值上面
y.operator==(x.getvalue().operator Y() ))
我们来看一下过程
产生了一个临时的classXX的object,放置getvalue()的返回值
产生了一个临时的classYY的object,放置operatorY()的返回值
产生了一个临时的bool的object,放置判断的结果
然后析构函数被调用
博客展示了一个C++的简单示例,在y == (x.getvalue())比较中,第一次决议为y.operator==(( x.getvalue() )) ,因x.getvalue()返回XX对象需转为YY对象,即y.operator==(x.getvalue().operator Y() )),过程中产生多个临时对象,最后调用析构函数。
441

被折叠的 条评论
为什么被折叠?



