Die Fakten:
i ++ und ++ i sind gleich gut lesbar. Sie mögen keine, weil Sie nicht daran gewöhnt sind, aber es gibt im Grunde nichts, was Sie falsch interpretieren können, so dass es keine Arbeit mehr zum Lesen oder Schreiben gibt.
In einigen Fällen ist der Postfix-Operator weniger effizient.
In 99,99% der Fälle spielt es jedoch keine Rolle, weil (a) es sowieso auf einen einfachen oder primitiven Typ wirkt und es nur ein Problem ist, wenn es ein großes Objekt kopiert. (B) es wird nicht in einer Aufführung sein Kritischer Teil von Code (c) Sie wissen nicht, ob der Compiler ihn optimieren wird oder nicht.
Daher empfehle ich die Verwendung des Präfix, es sei denn, Sie benötigen speziell Postfix. Dies ist eine gute Angewohnheit, nur weil (a) es eine gute Angewohnheit ist, mit anderen Dingen präzise umzugehen, und (b) wenn Sie einmal einen blauen Mond erreicht haben, werden Sie beabsichtigen, Postfix zu verwenden und verstehe es falsch: Wenn du immer schreibst, was du meinst, ist das weniger wahrscheinlich. Es gibt immer einen Kompromiss zwischen Leistung und Optimierung.
Sie sollten Ihren gesunden Menschenverstand verwenden und nicht mikrooptimieren, bis Sie es brauchen, aber auch nicht ineffizient sein. In der Regel bedeutet dies: Schließen Sie zunächst jede Codekonstruktion aus, die selbst in nicht zeitkritischem Code inakzeptabel ineffizient ist (normalerweise ein grundlegender konzeptioneller Fehler, z. B. das Übergeben von 500 MB-Objekten als Wert ohne Grund). und zweitens wählen Sie von jeder anderen Art, den Code zu schreiben, die klarste.
Allerdings glaube ich, dass die Antwort einfach ist: Ich glaube, dass das Schreiben eines Präfixes, es sei denn, Sie benötigen speziell Postfix, (a) sehr unwahrscheinlich klarer und (b) sehr unwahrscheinlich effizienter ist, also sollten Sie das immer standardmäßig schreiben, aber Mach dir keine Sorgen, wenn du es vergisst.
Vor sechs Monaten dachte ich genauso wie Sie, dass i ++ natürlicher sei, aber es ist rein das, was Sie gewohnt sind.
BEARBEITUNG 1: Scott Meyers in "Effektiveres C ++", dem ich im Allgemeinen vertraue, sagt, dass Sie generell die Verwendung des Postfix-Operators für benutzerdefinierte Typen vermeiden sollten (da die einzige vernünftige Implementierung der Postfix-Inkrementierungsfunktion darin besteht, a zu erstellen Kopieren Sie das Objekt, rufen Sie die Funktion zum Inkrementieren des Präfix auf, um das Inkrementieren durchzuführen, und geben Sie die Kopie zurück. Kopiervorgänge können jedoch teuer sein.
Wir wissen also nicht, ob es allgemeine Regeln gibt, um (a) ob dies heute zutrifft, (b) ob dies auch (weniger) für intrinsische Typen gilt, (c) ob Sie "++" verwenden sollten etwas mehr als eine leichte Iteratorklasse überhaupt. Aber aus all den Gründen, die ich oben beschrieben habe, spielt es keine Rolle, was ich vorher gesagt habe.
EDIT 2: Dies bezieht sich auf die allgemeine Praxis. Wenn Sie denken, dass es in einem bestimmten Fall wichtig ist, sollten Sie es profilieren und sehen. Die Profilerstellung ist einfach und kostengünstig und funktioniert. Aus den ersten Prinzipien abzuleiten, was optimiert werden muss, ist schwierig und teuer und funktioniert nicht.
i++
bevor ich wusste, dass es die Leistung beeinträchtigen könnte++i
, also habe ich gewechselt. Zuerst sah letzteres etwas seltsam aus, aber nach einer Weile habe ich mich daran gewöhnt und jetzt fühlt es sich so natürlich an wiei++
.