【发布时间】:2011-11-15 21:34:42
【问题描述】:
cout<<(x++)++; //fails
cout<<++(++x); //passes
为什么后增量失败?我看到它发生了,但不确定技术原因。
【问题讨论】:
-
后增量临时?
-
x的类型是什么?这很重要。如果是内置的,operator++不是函数调用。
标签: c++
cout<<(x++)++; //fails
cout<<++(++x); //passes
为什么后增量失败?我看到它发生了,但不确定技术原因。
【问题讨论】:
x 的类型是什么?这很重要。如果是内置的,operator++ 不是函数调用。
标签: c++
x++ 返回一个右值,因此您不能再次对其执行++。另一方面,++x 返回一个左值,因此您可以对其执行++。
【讨论】:
这就是增量运算符在 C/C++ 中的工作方式。
如果将++ 放在变量之后(后缀增量),则整个表达式的计算结果为变量之前递增的值。
如果您将++ 放在变量之前(前缀增量),则表达式的计算结果为增量操作后的值。
虽然前缀操作返回对传递变量的引用,但后缀版本返回一个临时值,该值不得递增。
【讨论】:
没错。你不能对右值执行 ++。 here 给出了关于右值如何工作的一个很好的解释。
【讨论】: