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&amp;是正确的返回类型,但我不明白为什么Point返回类型也不起作用。
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 ++()应该仍然给出相同的结果,因为它会隐式调用它的复制构造函数,所以虽然速度较慢,但我认为它应该给出相同的结果。
答案 0 :(得分:2)
当++
返回副本时,++
中的第二个++(++pos)
会在第一个operator++
返回的副本上调用++
,而不是原始pos
pos
。因此原始{{1}}仅递增一次。
答案 1 :(得分:0)
Point& operator++()
应该通过引用返回非const来让我们这样做,
Point p;
++++p;
如果它返回Point
,您将尝试修改不是您想要的行为的临时文件。