Frage zur zuweisung mit Fragezeichenoperator in c

Gast #5651064
Lesenswert?

Hallo,
ich habe eine frage. Bei folgender zuweisungwird nicht mehr kompiliert
1
x = direction == 1 ? x+=2 : x-=2;
Bekomme die Meldung
error: lvalue required as left operand of assignment
             x = direction == 1 ? x+=2 : x-=2;
Mit einem kleinem Pfeil auf das -=.
schreibe ich anstelle von x-=2 einfach nur einen Wert, wird durchgebaut. 
Warum geht das nicht mit dem -= ? x+=2 ist ja anscheinend auch kein 
Problem.
#5651264
Lesenswert?

Yalu X. schrieb:
> Da direction nur die Werte 0 und 1 annehmen kann, also eine boolesche
> Größe ist, würde ich stattdessen eine Variable vom Typ bool namens
> forward oder rightward o.ä. verwenden und den Ausdruck so schreiben:

Ich würde den Namen beibehalten und einen enum mit den Werten "forward" 
und "backward" oder wie immer sie heißen sollen verwenden. Am besten die 
2 noch durch sowas wie "speed" ersetzen, so dass diese magische Zahl 
auch noch verschwindet.  Ich würd's wohl auch ausschreiben und den 
?:-Operator hier gar nicht verwenden. Der ist ja eher dafür gedacht, 
zwischen zwei Werten auszuwählen. Hier wird aber eher zwischen zwei 
Oeratoren ausgewählt.
Würde also bei mir wohl in etwa so aussehen:
1
if (direction == Forward)
2
    x += SPEED;
3
else
4
    x -= SPEED;

Das finde ich am besten lesbar.
Gast #5651281
Lesenswert?

Yalu X. schrieb:
> Da direction nur die Werte 0 und 1 annehmen kann, also eine boolesche
> Größe ist, würde ich stattdessen eine Variable vom Typ bool namens
> forward oder rightward o.ä. verwenden und den Ausdruck so schreiben:
>
> x += forward ? 2 : -2;

Ich bin ja in Zeiten von Spectre und Konsorten dafür möglichst jeden 
Branch zu vermeiden. Also:
1
x += 2 * (2 * forward - 1);
;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren