(int) + 4*5;
Warum ist dies möglich (Hinzufügen eines Typs mit einem Wert) ? (versucht mit g ++ und gcc.)
Ich weiß, dass es keinen Sinn ergibt (und keine Wirkung hat), aber ich möchte wissen, warum dies möglich ist.
c++
c
casting
language-lawyer
Ernest Bredar
quelle
quelle
(int)-4*5
cppinsights
, das hilft zu verstehen, wie der Code aus der Perspektive des Compiler-Frontends aussieht. Es hat auch eine Online-Version, Sie können sehen, was es über Ihr Beispiel sagt (die gleiche "Klammerung" wie die Antworten, die Sie gegeben haben)+(int)+ 4*5;
und-(int)- 4*5;
und-+-+-(int)-+-+- 4*5;
und weniger poetisch;
Antworten:
Der
+
hier ist ein unärer+
Operator , nicht der binäre Additionsoperator . Hier passiert nichts.Die Syntax
(int)
wird auch für die Typumwandlung verwendet.Sie können diese Anweisung als erneut lesen
welches als analysiert wird
was sagt,
+
Operator auf den ganzzahligen Konstantenwert an4
.int
5
Dies ist ähnlich wie dort
(int) (- 4) * (5);
, wo die Verwendung des unären Operators vertrauter ist.In Ihrem Fall sind Unary
+
und Cast toint
- beide überflüssig.quelle
(+ 4)
nicht die Operanden machen+4
, gelten sie Mittel die unären+
zu Operanden4
, die in der Tat ein no-op im Fall des OP ist, könnten aber integer Förderung oder Array Zerfall in anderen Umständen verursachen. Zum Beispielchar c = 0; sizeof +c == sizeof c
ist wahrscheinlich falsch undsizeof +"a"
ist wahrscheinlich nicht 2.42;
:-)Dies wird interpretiert als
((int)(+4)) * 5
. Das heißt, ein Ausdruck+4
(ein unärer Plus-Operator, der auf ein Literal angewendet wird4
), der inint
einen C-Stil umgewandelt und das Ergebnis mit multipliziert wird5
.quelle