2013-09-04 13 views
10

Vor kurzem habe ich versucht, den folgenden Code zu verwenden:Sollte das nicht "= +" ein Syntaxfehler sein?

int number = 4; 
number += other_variable;//2 
... 
printf("Number:%d\n",number);//-->6 

aber ich hatte einen Tippfehler und stattdessen habe ich diesen Code bekam:

int number = 4; 
number =+ other_variable;//2 
... 
printf("Number:%d\n",number);//-->2 

Anscheinend zusammengestellt dies mit gcc 4.7.3 und gcc 4.4.3 und die Ergebnis war als normaler Zuweisungsoperator. Die Frage lautet: Sollte das nicht ein Syntaxfehler sein?

+9

Die Downvotes und Marken sind ein bisschen hart. Das OP wusste nicht, dass es ein unärer Plusoperator war. –

+8

Sie sind nicht ein bisschen hart, sie sind menschenfeindlich. – fiscblog

+1

Und btw ich sehe nicht, wie ist das dupliziert von 'was ist der unary plus-Operator tun?' – KiaMorot

Antwort

12

Nein - das analysiert wird, wie:

number = +other_variable; 

heißt Sie Zuordnung und einen unären Operator + haben. Sie lesen es als =+, aber es ist zwei separate Operatoren, = und +.

4

Nein, es ist nur ein Null-Op.

number = +other_variable; 
number = 0 + other_variable; 

Als Ergänzung zu diesen Operationen, die negieren:

number =- other_variable; 
number = -other_variable; 
number = 0 - other_variable; 
+1

-1, das ist sicherlich nicht, was es tut, es berechnet nicht den absoluten Wert seines Operanden. – unwind

+1

@unwind Nur schlecht formuliert von mir, ich meine nicht, dass es das Zeichen geändert hat. – user2586804

+0

@molbdnilo Nur schlecht von mir formuliert, meinte ich nicht das '+' geänderte Zeichen oder dass das '-' ein negatives Zeichen erzwang. – user2586804

0

Nein, es handelt sich nicht um einen Syntaxfehler.

Es ist das gleiche analog zu a=-b; - Sie können auch a=+b; tun. Es hat keine Wirkung, dies zu tun (für eingebaute Typen, Objekte, die Sie definiert haben operator+() für könnte hier etwas Funky tun), aber es ist perfekt gültig C-Code.

1

Nein, sie sind zwei getrennte Operatoren.

number = (+other_variable);

Der unäre Operator +, wenn auf einen Basisdatentyp angewandt, soweit ich weiß, tut nicht alles anderes als den ursprünglichen Wert zurück. Es kann jedoch überlastet werden.

Es ist das Gegenstück zum unären - Operator, der das Zeichen invertiert.

number = (-other_variable);

Verwandte Themen