【问题标题】:assigning a variable to pre-increment variable and post increment variable?将变量分配给预增量变量和后增量变量?
【发布时间】:2023-03-09 16:08:01
【问题描述】:

以下两个作业有什么区别?

#include<iostream>

using namespace std;
int main(){
    int a=10,i=0;
    ++i = a //COMPILES WITHOUT ERROR
    i++ = a //GIVES AN ERROR LVALUE NEEDED
}

为什么第二次赋值会出错?

【问题讨论】:

  • ++i = a,即使它可以编译,可能仍然是未定义的行为,至少在 C++11 之前是这样。

标签: c++


【解决方案1】:

++i 在递增后返回i 的新值。该值是一个左值,在本例中称为i。修改i当然是允许的。

但是i++ 在递增之前返回i 的旧值。该值是 rvalue,即未命名的临时值。在 C++ 中不允许修改右值。

【讨论】:

  • “在 C++ 中不允许修改右值” 这不是一揽子规则。
【解决方案2】:

预递增操作返回其参数 (i) 已经递增 1。返回的东西是一个变量,你可以给它赋值。

后增量返回旧值 i - rvalue,无法分配给它。

请参阅 this question 以了解 C++ 中 operator++ 的实现。

【讨论】:

  • @LightnessRacesinOrbit,我的意思是,这对程序员来说是垃圾,因为不再需要这个值
  • 在 99% 的情况下这是不正确的,否则构造将不存在。通常当人们说“垃圾”时,他们的意思是“任意/未指定的值”,这当然不能描述这一点。
  • @LightnessRacesinOrbit,说实话,在这种特殊情况下选择合适的词对我来说并不容易,所以我的选择可能是错误的,我现在会尝试修复它。
猜你喜欢
  • 1970-01-01
  • 2012-03-19
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
相关资源
最近更新 更多