(int) + 4*5;
Warum ist das (Hinzufügen eines Typs mit einem Wert) möglich? (versucht mit g++ und gcc.)
Ich weiß, dass es keinen Sinn macht (und keine Wirkung hat), aber ich möchte wissen, warum dies möglich ist.
Ernst Breder
(int) + 4*5;
Warum ist das (Hinzufügen eines Typs mit einem Wert) möglich? (versucht mit g++ und gcc.)
Ich weiß, dass es keinen Sinn macht (und keine Wirkung hat), aber ich möchte wissen, warum dies möglich ist.
Sourav Ghosh
Das +
hier ist einstellig +
Operatornicht der binärer Additionsoperator. Hier findet keine Addition statt.
Auch die Syntax (int)
wird für die Typumwandlung verwendet.
Sie können diese Aussage erneut lesen als
(int) (+ 4) * 5;
was geparst wird als
((int) (+ 4)) * (5);
was sagt,
+
Operator für den ganzzahligen konstanten Wert 4
.int
5
Dies ist ähnlich wie (int) (- 4) * (5);
wo die Verwendung des unären Operators geläufiger ist.
In Ihrem Fall das unäre +
und die Besetzung zu int
– beide sind überflüssig.
“Casting”, nicht “Typecasting”. Typecasting ist etwas, das Schauspielern passiert.
– Keith Thompson
21. April 2019 um 23:41 Uhr
(+ 4)
ist nicht den Operanden machen +4
es bedeutet, das Unäre anzuwenden +
zu Operand 4
, was im Fall des OP tatsächlich ein No-Op ist, aber unter anderen Umständen eine Integer-Promotion oder einen Array-Verfall verursachen könnte. Zum Beispiel char c = 0; sizeof +c == sizeof c
ist wahrscheinlich falsch und sizeof +"a"
ist wahrscheinlich nicht 2.
– chqrlie
22. April 2019 um 0:07 Uhr
“beide sind überflüssig” – das Ganze ist überflüssig, genau wie 42;
🙂
– paxdiablo
22. April 2019 um 8:17 Uhr
Ich sehe nichts Falsches daran, den Begriff Type Casting zu verwenden. Es scheint Ich bin nicht der einzige.
– Ben
22. April 2019 um 15:28 Uhr
@Ben Typecasting ist kein Typecasting.
– Kenneth K.
22. April 2019 um 17:05 Uhr
Dies wird interpretiert als ((int)(+4)) * 5
. Das heißt, ein Ausdruck +4
(ein unärer Plusoperator, der auf ein Literal angewendet wird 4
), in Typ umwandeln int
mit einem Cast im C-Stil, und das Ergebnis multipliziert mit 5
.
gleich wie
(int)-4*5
– 0___________
21. April 2019 um 15:29 Uhr
Es gibt ein nützliches Tool namens
cppinsights
das hilft zu verstehen, wie der Code aus der Frontend-Perspektive des Compilers aussieht. Es hat auch eine Online-Version, Sie können sehen, worüber es erzählt dein beispiel (die gleiche ‘Einklammerung’ wie die Antworten, die Sie erhalten haben)– Nikita Kniazev
21. April 2019 um 21:02 Uhr
Diese Aussage ist äquivalent zu
+(int)+ 4*5;
und-(int)- 4*5;
und-+-+-(int)-+-+- 4*5;
und weniger poetisch;
– chqrlie
22. April 2019 um 0:12 Uhr
Welcher Teil verwirrt Sie? Soweit ich weiß, fragen Sie, warum Sie 5 schreiben dürfen, ohne das Zeichen anzugeben.
– Carsten S
22. April 2019 um 6:26 Uhr
Sollte C++ Sie nicht warnen, dass Umwandlungen vom Typ C in C++ nicht empfohlen werden?
– Herr Lister
22. April 2019 um 9:38 Uhr