运算符重载之不思议问题 @_@;
//先自增
Increase& Increase::operator ++()
{
value ++;
return *this;
}
//先引用
Increase Increase::operator ++(int)
{
Increase temp( *this);
value ++;
return temp;
}
//有一个东西我搞不懂
void main()
{
Increase n(20);
n.display();
(n++).display();//临时对象里的n
n.display();21
++n;
n.display();22
++(++n);
n.display();
}
//运行结果
The value is20
The value is20
The value is21
The value is22
The value is24
//问题
为什么最后一次运行“++(++n)”的结果是24,而不是23?
我认为是23的缘故:
首先,++n,执行了Increase Increase::operator ++(int)这个运算重载n.value自增一次值为23。
接着运算符重载返回的是一个临时对象(temp)。接下来我认为应该是++(temp)即对temp.value
进行了一次自增,而不是对n.value进行自增。所以运算的结果n.value应该是23而不是24,可是调试
结果却是24,实在令人费解。各位大侠可否教教小弟,这是为什么???感激不尽!