2013-09-04 16 views
10

Recentemente stavo cercando di utilizzare il seguente codice:Non dovrebbe essere questo "= +" un errore di sintassi?

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

ma ho avuto una battitura di errore e invece ho questo codice:

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

A quanto pare questa compilato con gcc 4.7.3 e gcc 4.4.3 e la risultato era come un normale operatore di assegnazione. La domanda è: non dovrebbe essere un errore di sintassi?

+9

I downvotes e mark sono un po 'duri. L'OP non sapeva che era un operatore unario più. –

+8

Non sono un po 'duri, sono misantropia. ? – fiscblog

+1

E btw non vedo come è questo duplicato di 'Qual è il più unario operatore di fare' – KiaMorot

risposta

12

No - questo viene analizzato come:

number = +other_variable; 

vale a dire che si hanno di assegnazione e un operatore unario +. Lo stai leggendo come =+ ma sono due operatori separati, = e +.

4

No, è solo un'opzione nulla.

number = +other_variable; 
number = 0 + other_variable; 

A complemento di queste operazioni, che negano:

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

-1, non è certamente ciò che sta facendo, non sta calcolando il valore assoluto del suo operando. – unwind

+1

@unwind Appena formulato male da me, non volevo dire che ha cambiato segno. – user2586804

+0

@molbdnilo Appena formulato male da me, non intendevo il segno '+' cambiato o che '' 'ha forzato un segno negativo. – user2586804

0

No, non si tratta di un errore di sintassi.

È lo stesso analogo a a=-b; - è possibile eseguire anche a=+b;. Non ha alcun effetto (per i tipi integrati, gli oggetti che hai definito operator+() potrebbero ovviamente fare qualcosa di funky qui), ma è un codice C perfettamente valido.

1

No, sono due operatori separati.

number = (+other_variable);

L'operatore + unario quando applicata ad un tipo di dati di base, per quanto ne so, non fa altro che restituire il valore originale. Tuttavia può essere sovraccaricato.

È la controparte di unario - operatore, che inverte il segno.

number = (-other_variable);

Problemi correlati