当我尝试在/减少中编写一个后缀/前缀,然后在/减少中进行帖子/前缀时,我会收到以下错误: 对操作++/ - 的参数无效.

但是,根据JLS:

PostIncrementExpression:
        PostfixExpression ++

PostfixExpression:
        Primary
        ExpressionName
        PostIncrementExpression
        PostDecrementExpression

所以写:

PostfixExpression ++ ++

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

有帮助吗?

解决方案

请注意,原始语法缺乏任何语义。这只是语法,并非每个句法有效的程序通常都是有效的。例如,在语法通常不涵盖用法之前必须声明变量的要求(您可以,但很麻烦)。

后缀 - 提出会产生一个rvalue - 就像您无法邮寄的文字一样,您也不能邮政篇小说。 i++.

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

后修正增量表达式的结果不是变量,而是值。

其他提示

错误告诉您答案:

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

因此,I ++在操作员需要变量时评估值。

您只能申请 ++ 或者 -- 表示表示可修改位置(LVALUE)的表达式。一个结果 ++ 或者 -- 是位置的值(一个rvalue - 在增量或减少之前或减少之前或之后),而不是本身是可修改的位置。所以你不能说 (a++)++ 比你说的更多 (a+b)++ - 没有位置可修改。

这个表达的问题 i =(i ++)++; 是(i ++)被解析为一个价值和定义 ++ 操作员说1 . 无论您使用Postfix还是前缀,它都会增加指定的变量,并将其放置/返回该值。2. 该操作员需要变量,无论是前缀还是后缀。但是这里发生的是(i ++)是返回一个值并将其列为(i ++),然后您有 (值)++(价值) 不是该操作员的预期类型,因为它需要变量代替价值。

例如,在Java中,如果您编译以下代码段,您将获得摘要后显示的错误:

公共类A {public void test(){int i = 0; i =(i ++)++; }}}

汇编输出:

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

我++基本上是:

(i = i+1)

写作没有任何意义:

(i = i+1)++;

正确的? :)

这样的操作应该是什么结果?的结果 i++ 是(副本)的当前值 i, , 和 i 之后会增加(邮政)。那么,您如何想象会增加 i++ 再次?如果 i 最初是1,其价值应在 i++++, ,这项操作应该是什么结果?

如果您考虑一下,您可能会意识到这将是 非常 难以正确定义这个。由于Java的设计师打算避免C/C ++“未定义”陷阱(并且由于这种陈述的价值充其量是可疑的),因此他们可能决定明确禁止它。

必须记住: 增量和减少(前缀和后缀)操作员始终与 多变的 不是 价值

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

int i = 0;

int j = (i++)++;

在Exe上方。

初始化的值 一世 与0(零)

(i ++) '++'与i合作,这是可变的,执行操作返回后 (1)

现在 (1)++ '++'与(1)合作,它是与Java规则相对的值,这就是为什么编译时间错误生成的原因 对操作++/ - 的参数无效

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

将其递增两次!

使用循环

在循环中递增:)

在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?

您为什么不使用速记增量操作员?

i+=2

那里。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top