7

当我尝试在/递减中写入后缀/前缀,然后在/递减中写入后缀/前缀时,出现以下错误:操作参数无效 ++/--

但是,根据 JLS:

PostIncrementExpression:
        PostfixExpression ++

PostfixExpression:
        Primary
        ExpressionName
        PostIncrementExpression
        PostDecrementExpression

所以写:

PostfixExpression ++ ++

应该是可能的......有什么想法吗?

4

10 回答 10

23

请注意,原始语法缺少任何语义。它只是语法,并不是每个语法上有效的程序通常都是有效的。例如,在使用之前必须声明变量的要求通常不包含在语法中(您可以,但它很麻烦)。

后缀增量产生一个右值——就像你不能后缀增量文字一样,你不能后缀增量i++.

引用 JLS(第 3,第 486 页):

后缀增量表达式的结果不是一个变量,而是一个值。

于 2011-01-10T21:22:57.507 回答
8

错误告诉你答案:

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

因此, i++ 计算为一个值,而运算符需要一个变量。

于 2011-01-10T21:23:54.247 回答
5

您只能将++or--应用于表示可修改位置(左值)的表达式。++or的 RESULT--是来自该位置的值(一个右值——在递增或递减之前或之后),而不是其本身是可修改的位置。所以你不能说(a++)++比你能说的更多(a+b)++——没有要修改的位置。

于 2011-01-10T21:25:35.963 回答
4

这个表达式的问题i = (i++)++; 是 (i++) 被解析为一个值,并且++运算符的定义说 1 。无论您使用 Postfix 还是 Prefix,它都会增加指定的变量并为此放置/返回一个值。 2.该运算符需要变量,无论是前缀还是后缀。但是这里发生的事情是 (i++) 返回一个值并将其放在 (i++) 的位置,然后您将拥有(value)++ 并且(value)不是该运算符的预期类型,因为它需要一个变量的价值。

例如,在 Java 中,如果您编译以下代码片段,您将收到错误,如片段后所示:

公共类 A{ 公共无效测试(){ int i =0; 我 = (i++)++; } }

编译输出:

A.java:4:需要意外类型:找到变量:值 i = (i++)++;^ 1 个错误

于 2013-07-23T13:44:28.093 回答
2

i++ 基本上是一个快捷方式:

(i = i+1)

而且这样写是没有任何意义的:

(i = i+1)++;

正确的?:)

于 2011-01-10T21:30:57.357 回答
1

必须记住:递增和递减(前缀和后缀)运算符始终使用变量而不是

在这里,我用一个 exe 来解释这一点:

int i = 0;

int j = (i++)++;

上面的exe。

用 0(零)初始化i的值

(i++) '++' 与 i 一起工作,它是变量 & 执行操作返回(1)

现在在(1)++ '++' 中与 (1) 一起工作,它是与 Java 规则相反的值而不是变量,这就是编译时错误生成操作的无效参数 ++/--的原因

于 2015-04-06T12:59:11.083 回答
1

这种操作的结果应该是什么?的结果i++是 的当前值(的副本)ii之后递增(post)。那么你如何想象i++再次增加结果呢?如果i原来是1,那么它的值i++++应该是什么,这个操作的结果应该是什么?

如果您考虑一下,您可能会意识到要正确定义它是非常困难的。由于 Java 的设计者打算避免 C/C++“未定义”的陷阱(并且由于这样的声明的价值充其量是可疑的),他们可能决定明确地禁止它。

于 2011-01-10T21:23:46.413 回答
0

你为什么不只使用速记增量运算符?

i+=2

那里。

于 2011-07-13T20:01:58.297 回答
0

在 i++ 中,++ 是后缀运算符,因此它返回 i 的值,然后将其递增。你想让 (i++)++ 做什么?它应该从(i++ == i)返回 i+1 吗?如果不是,那么 i++=i 但是 (i++)++ != i) 考虑以下表达式并不奇怪:

i++  ==  i;   // true
j = i++  // j gets the value of i
j++ == i //  still true since j== i

(i++) ++ ==  j ++    //  what should be the answer here?

你考虑过i+=2吗?

于 2011-01-10T21:29:39.403 回答
0

你试图通过 (i++)++ 实现什么?

增加两次!!

使用循环

在循环内递增:)

于 2011-01-10T21:22:49.413 回答