Unterschied ++i, i++ bei for-Schleife?



  • Die Frage ob i++ oder ++i in diesem Fall ist so relevant wie die Frage welche Einrückung sich warum durchgesetzt hat. Sie ruft allenfalls Missionare des "guten Stils" um ihre Weisheit kundzutun.

    cooky451 schrieb:

    Warum aber hat sich dann doch irgendwie i++ eingebürgert?

    Würde ich schon fast als schlechten Stil ansehen..

    qed



  • Tim schrieb:

    qed

    Dafür, dass es fast 10 Minuten nach meinem Post kam, fand ich's nicht mehr so beeindruckend. 😃



  • Ich bin hier leider in einer temporalen Anomalie namens "Arbeit" gefangen 😞



  • Die Prefix-Variante ist ein Hinweis für den Compiler zur Geschwindigkeitsoptimierung. (Der kann etwas diesbezüglich machen, kann es auch bleiben lassen). Bei der Prefix-Variante liegt der Wert anschließend eher im Cache für direkt nachfolgende Aktionen als bei Postfix. Interessanter/wirkungsvoller in C++ für nichttriviale Fälle, bei denen kein einfacher Typ vorliegt, sondern irgendwelche Objekte/Iteratoren, wo Prefix/Postfix normalerweise überschrieben ist.



  • Tim schrieb:

    Ich bin hier leider in einer temporalen Anomalie namens "Arbeit" gefangen 😞

    Dann spare Zeit:

    😃



  • Wutz schrieb:

    Die Prefix-Variante ist ein Hinweis für den Compiler zur Geschwindigkeitsoptimierung. (Der kann etwas diesbezüglich machen, kann es auch bleiben lassen). Bei der Prefix-Variante liegt der Wert anschließend eher im Cache für direkt nachfolgende Aktionen als bei Postfix.

    Wo hast du das denn her? Finde ich nicht plausibel.



  • Na wenn der Wert bei Prefix eher im Cache liegt, dann nehme ich erst recht postfix, da bleibt er dann gleich im Register liegen? 🤡

    Und die C++-Argumentation ist hier einfach nur off-topic.



  • Ich schreibe auch i++ . Meine Vermutung ist, dass Postfix bevorzugt wird, weil unserem Denken entspricht. Es heißt ja auch C++ und nicht ++C (auch wenn das wenig mit C zu tun hat). Außerdem schreiben wir immer im deutschen und im Englischen das Subjekt zuerst und erst danach, was damit passieren soll (auf "normale Sätze" bezogen). Z.B.: Stucts werden auch in der Form Parent.Children.Children geschreiben und nicht umgekehrt.



  • Rhombicosidodecahedron schrieb:

    im deutschen und im Englischen das Subjekt zuerst und erst danach

    Die Sprache schrieb:

    {Entleere} [den Kasten] und {fülle} [ihn] dann wieder auf.

    Hm..



  • cooky451 schrieb:

    Rhombicosidodecahedron schrieb:

    im deutschen und im Englischen das Subjekt zuerst und erst danach

    Die Sprache schrieb:

    {Entleere} [den Kasten] und {fülle} [ihn] dann wieder auf.

    Hm..

    Das sind keine Subjekte, sondern Objekte. Grundschulstoff!



  • Tim schrieb:

    Ich bin hier leider in einer temporalen Anomalie namens "Arbeit" gefangen 😞

    für den einen ist es eine anomalie, für den anderen gehört sie zum leben.
    *scnr*
    😃



  • Bashar schrieb:

    Das sind keine Subjekte, sondern Objekte. Grundschulstoff!

    Äh..

    (Es bleibt aber natürlich dabei, dass man beim Imperativ erst sagt was und dann womit. (Und C soll ja angeblich eine imperative Sprache sein.))



  • yahendrik schrieb:

    Und in Programmiersprachen, in denen der Operator bei benutzerdefinierten Typen überladen werden kann (C++), kann der Unterschied gravierend sein. Beim Postinkrement wird immer ein temporäres Objekt benötigt.

    Schlimmer: In C++ können Prä- und Post-Inkrement völlig unabhängig voneinander definiert werden (sollte man aber besser nicht machen, wenn den Code noch jemand verstehen soll ;)).

    @Topic: Ich hatte mir während meiner aktiven Zeit die Schreibweise ++i angewöhnt. Aber Regeln von Deutsch auf C abzuleiten halte ich für zweifelhaft. (Aber trotzdem passt "inkrementiere i" in das Schema "entleere den Kasten")


Anmelden zum Antworten