class point
{
private:
double x,y;
public:
point(double x=0.0, double y=0.0)
{
this->x=x;
this->y=y;
}
point operator++()
{
this->x=this->x+1.0;
this->y=this->y+1.0;
return *this;
}
point& operator++(int)
{
point p=point(this->x, this->y);
++(*this);
return p;
}
ostream& operator<< (ostream& o)
{
o << "X: " << this->x << endl << "Y: " << this->y;
return o;
}
friend ostream& operator<< (ostream& o,point p)
{
o << "X: " << p.x << endl << "Y: " << p.y;
return o;
}
};
int main()
{
point p = point();
p++ << cout << endl; // first output
cout << p++ << endl;// second output
}
我不明白为什么第一个输出不正确(X:6.95333e-310 Y:6.95322e-310),而第二个输出是正确的(X:1 Y:1)。
为什么通过在后增量运算符的返回值的末尾删除&
来解决此问题?
答案 0 :(得分:4)
当您返回对局部变量的引用时,使用该引用是未定义的行为。
您的编译器应该警告您。如果不是,请提高编译器警告级别,并注意警告。
point& operator++()
point operator++(int)
是正确的返回值。
其余代码似乎正常。
我会删除using namespace std;
,并将++
的实现更改为:
++x;
++y;
return *this;