Frage

Wenn ich versuche, ein postfix / Präfix in / Dekrement von einem Post gefolgt zu schreiben / Präfix in / Dekrement, ich die folgende Fehlermeldung erhalten:. Invalid argument für den Betrieb ++ / -

Aber nach JLS:

PostIncrementExpression:
        PostfixExpression ++

und

PostfixExpression:
        Primary
        ExpressionName
        PostIncrementExpression
        PostDecrementExpression

so zu schreiben:

PostfixExpression ++ ++

sollte möglich sein ... Irgendwelche Gedanken?

War es hilfreich?

Lösung

Beachten Sie, dass die rohe Grammatik keine Semantik fehlt. Es ist nur Syntax, und nicht jedes syntaktisch gültiges Programm wird in der Regel gültig sein. Zum Beispiel müssen die Anforderung, dass Variablen deklariert werden vor der Verwendung wird in der Regel nicht von der Grammatik abgedeckt (Sie können, aber es ist umständlich).

Postfix-Zuwachs ergibt sich ein R-Wert - und nur, wie Sie können nicht Postfix-Erhöhungs-Literale, kann man nicht postfix-Schritt das Ergebnis i++

.

von dem JLS Zitiert (3 rd ed, Seite 486.):

Das Ergebnis der postfix Inkrementausdruck ist keine Variable, sondern ein Wert.

Andere Tipps

Der Fehler zeigt Ihnen die Antwort:

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

Also, das i ++ auswertet auf einen Wert, während der Bediener erfordert eine Variable.

Sie können nur ++ oder -- auf einen Ausdruck anwenden, die eine änderbare Stelle bezeichnet (ein L-Wert). Das Ergebnis eines ++ oder -- ist der Wert von dem Ort (rvalue - entweder vor oder nach der Inkrementierung oder Dekrementierung) und nicht selbst eine veränderbaren Lage. So dass Sie nicht (a++)++ mehr sagen kann, als Sie (a+b)++ sagen kann -. Es gibt keinen Ort geändert werden

Das Problem mit diesem Ausdruck i = (i ++) ++; ist, dass (i ++) auf einen Wert gelöst wird und die Definition von ++ Betreiber sagen, dass 1. wird die Variable erhöht angegeben und einen Wert für diese setzen / zurückgeben, ob Sie Postfix oder Präfix verwenden. 2. Dieser Operator erfordert variable ob Präfix oder Postfix. Aber was passiert hier ist (i ++) ist einen Wert zurückgeben und es anstelle von (i ++) setzen und dann sind Sie mit (Wert) ++ und (Wert) ist nicht der erwartete Typ, wie es für diesen Operator eine Variable anstelle von Wert erfordert.

zum Beispiel in Java, wenn Sie den folgenden Code kompilieren Snippet Sie Fehler erhalten, wie nach Snippet angezeigt wird:

public class A { public void Test () { int i = 0; i = (i ++) ++; } }

Compilation Ausgabe:

A.java:4: unerwartete Art erforderlich: variable gefunden: Wert i = (i ++) ++; ^ 1 Fehler

i ++ ist im Grunde eine Abkürzung für:

(i = i + 1)

Und es würde keinen Sinn zu schreiben machen:

(i = i + 1) ++;

oder? :)

What should be the result of such an operation? The result of i++ is (a copy of) the current value of i, and i is incremented afterwards (post). So how do you imagine incrementing the result of i++ once again? If i originally was 1, what should its value be after i++++, and what should be the result of this operation?

If you think about it, you probably realize it would be very difficult to define this properly. Since the designers of Java intended to avoid the C/C++ "undefined" traps (and since the value of such a statement is dubious at best), they probably decided to explicitly disallow it.

Must Remember: Increment & decrement (prefix & postfix) operator always work with variable not value

Here i am explain this with one exe :

int i = 0;

int j = (i++)++;

above exe.

initialize value of i with 0(zero)

in (i++) '++' work with i which is variable & after performing operation return (1)

now in (1)++ '++' work with (1) which is value not variable that is oppose to rules of java that's why compile time error generate Invalid argument to operation ++/--

What you trying to achieve by (i++)++ ?

increment it twice!!

Use Looping

Increment inside a loop :)

In i++, ++ is a postfix operator, so it returns the value of i and then increments it. What would you want (i++)++ to do? Should it return i+1 since (i++ == i )? If not wouldn't that be strange that i++=i but (i++)++ != i) consider the following expressions:

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?

Have you considered i+=2?

Why don't you just use the shorthand increment operator?

i+=2

There.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top