自增操作符的一个疑问


   
  int _tmain(int argc, _TCHAR* argv[])
  
{
int x = 0;
while (x < 5)
{
x = x++;
std::cout<<x;
}
return 0;
}

上面这段代码并不会出现死循环,我运行之后,输出的结果是12345(vs2010),但是在看德问这个帖子的时候 (链接 ),LZ说在java里面写这段语句出现了死循环。。java和c++处理自增的时候有什么不同呢

java C++

illyna 11 years, 5 months ago

不知道C++对内置类型的自增是怎么样的,自己重载了一下后自增运算符,结果也是死循环的。
测试代码如下:

   
  class X
  
{
public:
explicit X(int xx):x(xx){}
X operator ++(int)
{
X temp(*this);
x++;
return temp;
}
X operator = (const X& xx)
{
this->x = xx.x;
return *this;
}
int x;
};
int main()
{
X x(0);
while (x.x < 5)
{
x = x++;
std::cout<<x.x;
}
return 0;
}

而且楼主的那段代码字 codepad 上面编译之后,报了严重warning的。

   
  cc1plus: warnings being treated as errors
  
In function 'int main()':
Line 7: warning: operation on 'x' may be undefined

sdsd- answered 11 years, 5 months ago

Your Answer