操作重载 operator++()

operation overloading operator++()

class Point{
private:
    int xpos, ypos;
public:
    Point(int x=0, int y=0) : xpos(x), ypos(y) { }
    void showPosition() const {
        cout<<"["<<xpos<<", "<<ypos<<"]"<<endl;
    } 
    Point& operator++(){  //Point operator++()
        xpos+=1;
        ypos+=1;
        return *this;
    }
};

对于 operator++() 我知道 Point& 是正确的 return 类型,但我不明白为什么 Point return 类型也不起作用。

    Point operator++(){ 
        xpos+=1;
        ypos+=1;
        return *this;
    }

当我用它来表演时

Point pos(1,3);
++(++pos);

我明白了

[2,4]

没有

[3,5] //which is what I should be getting.

我认为没有引用的 operator++() 应该仍然给出相同的结果,因为它会隐式调用它的复制构造函数,所以尽管速度较慢,但​​我认为它应该给出相同的结果。

++ returns 一个副本时,++(++pos) 中的第二个 ++ 在第一个 ++ 返回的副本上调用 operator++ ],不是原来的pos。因此原来的pos只增加了一次。

Point& operator++()

应该return引用非常量以便让我们做,

Point p;
++++p;

如果 returned Point,您将尝试修改临时文件,这不是您想要的行为。