java前缀/后缀运算符

时间:2013-11-13 16:04:09

标签: java operators expression lvalue

为什么我收到错误:

int i=0;
++i++;

这个错误是什么意思?

  unexpected type ++i++;                    
  required: variable  
  found:    value

5 个答案:

答案 0 :(得分:4)

关于左值(左值)。左值是,“=”逗留的左侧可以。此外,你可以给出一个价值。例如,您不能将值赋予“4”,但您可以为“i”赋值。变量的表达式不仅仅是左值(除了一些非常深奥的编程语言)。

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

在C ++中,有一些棘手的运算符重载和引用变量技巧,可能会欺骗C ++编译器来正确处理它。

答案 1 :(得分:4)

由于++后缀和前缀具有相同的优先级,我们需要求助 associativity 来弄清楚发生了什么。

++的关联性是从右到左。

这意味着,从概念上讲,i++首先发生。但是,这当然是一个固定的(它是增量前i的值)。因此,前缀++将失败,因为它无法在固定值上运行。

答案 2 :(得分:4)

++ii++可用于变量,但不能用于值

i++
++i

没问题,但是

2++
++2

不是。 ++ii++的结果也不是变量i,但值(例如i=1 i++会将i更改为2但会返回值1)所以甚至做类似

的事情
(++i)++

是不正确的,因为在++i之后你只会尝试使用++ ++i的结果,例如2,这样你就可以尝试2++ 1}}。类似的情况转到++(i++)

答案 3 :(得分:3)

前缀和后缀版本都要求对变量执行操作,而不是值。您可以使用ii++增加变量++i,但不能增加53.14

++i++表示您尝试将i增加1,然后将结果增加1。有错误。

答案 4 :(得分:1)

++i++;无效。你一次只能做一个。前缀为++,后缀为++ 我看到你试图将值增加2。您可以按如下方式执行此操作:

i++ // will post-increment the value of i
++i // will pre-increment the value of i  

i++i = i + 1i += 1相同。因此,正如Sotirios Delimanolis在评论中指出的那样,你需要一些可以保存这个值的变量。