java前缀/后缀运算符

use*_*439 2 java expression operators lvalue

为什么我收到错误:

int i=0;
++i++;
Run Code Online (Sandbox Code Playgroud)

这个错误是什么意思?

  unexpected type ++i++;                    
  required: variable  
  found:    value
Run Code Online (Sandbox Code Playgroud)

pet*_*ica 5

这是关于左值(左值)的。左值是“=”左边留下的东西。另外,你可以赋予什么价值。例如,您不能为“4”赋值,但可以为“i”赋值。变量的表达式不仅仅是左值(一些非常深奥的编程语言除外)。

如果你写“++i++”,它将被解释为(++i)++或++(i++)。“i”是左值,但“i++”或“++i”不是,因为它们是表达式。

在 C++ 中,通过一些棘手的运算符重载和引用变量技巧,C++ 编译器可能会被欺骗以正确处理此问题。


Psh*_*emo 5

++i或者i++可以用于变量,但不能用于值

i++
++i
Run Code Online (Sandbox Code Playgroud)

没问题,但是

2++
++2
Run Code Online (Sandbox Code Playgroud)

不是。

另外++ior的结果i++不是变量i,而是其原始(例如,当 时i=1i++会更改i2但会返回1)。所以即使做类似的事情

(++i)++
Run Code Online (Sandbox Code Playgroud)

将是不正确的,因为在++i您尝试使用++其结果之后++i,例如可能是2. 这意味着您将尝试执行2++.

类似的问题存在于以下情况++(i++)