2011-09-13 66 views
7
cout<<(x++)++; //fails 
cout<<++(++x); //passes 

为什么后增量失败?我看到它发生,但不确定的技术原因。后增量运算符++

+2

post-incrementing临时? – Benoit

+0

'x'的类型是什么?这很重要。如果它是内置的,'operator ++'不是函数调用。 – MSalters

+0

它的内置说,int x = 5; – user835194

回答

13

x++返回一个右值,所以你不能再次执行++。另一方面,++x返回左值,因此您可以对其执行++

+1

也看到[这个问题](http://stackoverflow.com/questions/371503/why-is-i-considered-an-l-value-but-i-is-not) – Benoit

4

这就是增量操作符在C/C++中的工作方式。

如果你把++变量(后缀递增)之后,整个表达式的计算结果为变量前值递增。

如果将++放在变量(前缀增量)之前,则表达式求值为增量操作后的值。

尽管前缀操作返回对传递变量的引用,但后缀版本返回的临时值不得增加。

1

正确。哟不能在Rvalue上执行++。关于右值如何工作的一个很好的解释是here