【问题标题】:Mixing post- and pre- increment/decrement operators on the same variable [duplicate]在同一个变量上混合后置和前置递增/递减运算符[重复]
【发布时间】:2011-03-17 22:27:49
【问题描述】:

可能重复:
Why is ++i considered an l-value, but i++ is not?

在 C++(以及 C)中,如果我这样写:

++x--
++(x--)

我得到错误:需要左值作为增量操作数

但是 (++x)-- 编译。我很困惑。

【问题讨论】:

  • 请不要这样做,它会伤害我的眼睛。 :)
  • gcc 不会在这里编译 (++x)--g++ 会。同样适用于++i = 5;
  • @Prasoon:在operator--的函数调用之前有一个序列点。 operator++返回后还有一个序列点。
  • @Ken:他在哪里提到x 是一个对象而不是原始类型? C 标签:P

标签: c++ c increment decrement


【解决方案1】:

后自增和前自增运算符仅适用于左值。

当您调用++i 时,i 的值会递增,然后返回i。在 C++ 中,返回值是变量并且是左值。

当您调用i++(或i--)时,返回值是i 在递增之前的值。这是旧值的副本,与变量i 不对应,因此不能用作左值。

无论如何不要这样做,即使它可以编译。

【讨论】:

  • @Jerry:我刚刚为他修复了它,以及另一个小修改。
  • +1 表示Don't do this, even if it compiles.。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 2011-12-17
  • 2011-02-16
  • 2011-07-21
  • 2016-02-02
相关资源
最近更新 更多