Warum erlauben C und C++ den Ausdruck (int) + 4*5?

Lesezeit: 2 Minuten

Benutzeravatar von Ernest Bredar
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.

  • 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


Benutzeravatar von Sourav Ghosh
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,

  1. Wende das Unäre an + Operator für den ganzzahligen konstanten Wert 4.
  2. Typumwandlung in ein int
  3. mit Operand multiplizieren 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 +4es 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.

1419720cookie-checkWarum erlauben C und C++ den Ausdruck (int) + 4*5?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy