递增int值时的左值误差

时间:2018-05-06 12:36:28

标签: c++

int main()
{
  int a =1;
  cout<<++++a;  //Prints 3
  cout<<a++++; //Gives lvalue error
  cout<<++a++; //Gives lvalue error
}

当我尝试增加int值时,上面的代码给出了左值错误。请解释为什么在某些情况下会出现此错误,而在另一种情况下则不然

4 个答案:

答案 0 :(得分:2)

这是一个左值

int a=1;

这不是左值a++,它是一个右值,在递增之前是a的值。之后a会增加副作用。

前缀++a递增a,递增后为左值a

答案 1 :(得分:1)

在第一种情况下++++编译器首先在a中添加值然后显示输出。 在其他情况下,在屏幕上显示输出后,编译器无法在运行时在变量中添加值,为此您必须使用循环

答案 2 :(得分:1)

++a会产生左值,而a++会产生左值。前后增量运算符的操作数应该是左值。因此,++++a将起作用++a将给出左值。对于a++++(将被解析为(a++)++)和++a++(将被解析为)++(a++)a++将给出一个rvalue和increment运算符不能应用于右值(。

答案 3 :(得分:0)

第一种情况是++(++a),现在++a将a递增1并返回新值,它真的像a+=1;++a所以它有效。

第二种情况(a++)++递增a但返回旧值,因此它的计算结果为3++且3 ++完全无效,原因相同,第三种情况不起作用。< / p>