int main()
{
int a =1;
cout<<++++a; //Prints 3
cout<<a++++; //Gives lvalue error
cout<<++a++; //Gives lvalue error
}
当我尝试增加int值时,上面的代码给出了左值错误。请解释为什么在某些情况下会出现此错误,而在另一种情况下则不然
答案 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>