(int) + 4*5;
Perché è possibile (aggiungere un tipo con un valore) ? (provato con g ++ e gcc.)
So che non ha senso (e non ha effetto), ma voglio sapere perché è possibile.
(int) + 4*5;
Perché è possibile (aggiungere un tipo con un valore) ? (provato con g ++ e gcc.)
So che non ha senso (e non ha effetto), ma voglio sapere perché è possibile.
cppinsightsche aiuta a capire come appare il codice dal punto di vista del frontend del compilatore. Ha anche una versione online, puoi vedere cosa dice del tuo esempio (la stessa 'parentesi' delle risposte che hai dato)
+(int)+ 4*5;and -(int)- 4*5;and -+-+-(int)-+-+- 4*5;and meno poeticamente;
Risposte:
L' operatore+ here è unario+ , non l' operatore di addizione binaria . Non ci sono aggiunte in corso qui.
Inoltre, la sintassi (int)viene utilizzata per il typecasting.
Puoi rileggere quell'affermazione come
(int) (+ 4) * 5;
che viene analizzato come
((int) (+ 4)) * (5);
che dice,
+operatore unario al valore della costante intera 4.int5Questo è simile a (int) (- 4) * (5);, dove l'uso dell'operatore unario è più familiare.
Nel tuo caso, l'unario +e il cast to int- entrambi sono ridondanti.
(+ 4)non è creare l'operando+4 , significa applicare l'unario +all'operando 4, che in effetti è un no-op nel caso dell'OP, ma potrebbe causare la promozione dell'intero o il decadimento dell'array in altre circostanze. Ad esempio, char c = 0; sizeof +c == sizeof cè probabilmente falso e sizeof +"a"probabilmente non è 2.
42;:-)
Questo è interpretato come ((int)(+4)) * 5. Ovvero, un'espressione +4(un operatore più unario applicato a un letterale 4), cast per digitare intcon un cast in stile C e il risultato moltiplicato per 5.
(int)-4*5