Ich bezweifle sehr, dass dies zu einer Leistungssteigerung führt, außer in einem ganz bestimmten Szenario. In diesem Szenario ändern Sie a, b und c, und somit ändert sich, welcher der drei, die den Code auslösen, aber der Code wird trotzdem ausgeführt, dann könnte die Reduzierung des Codes auf eine if-Anweisung zu einer Verbesserung führen, da die CPU den Code im Verzweigungscache haben könnte, wenn sie das nächste Mal dazu kommt. Wenn Sie den Code verdreifachen, so dass er dreimal so viel Platz im Verzweigungscache einnimmt, besteht eine höhere Wahrscheinlichkeit, dass einer oder mehrere Pfade verdrängt werden, so dass die Ausführung nicht mehr optimal ist.
Es handelt sich um eine sehr niedrige Stufe, so dass ich auch hier bezweifle, dass dies große Auswirkungen haben wird.
Was die Lesbarkeit anbelangt, so stellt sich die Frage, welches Dokument leichter zu lesen ist:
- wenn etwas, tun Sie dies
- wenn etwas anderes, tun Sie dies
- wenn noch etwas anderes, tun Sie dies
- "dies" ist in allen drei Fällen dasselbe
oder dies:
- wenn etwas, oder etwas anderes, oder noch etwas anderes, dann tun Sie dies
Wenn Sie mehr Code als nur einen einfachen Funktionsaufruf einfügen, wird es schwierig zu erkennen, dass es sich tatsächlich um drei identische Codeteile handelt.
Die Wartungsfreundlichkeit sinkt mit der 3 if-Anweisung Organisation wegen dieser.
Sie haben auch doppelten Code, was fast immer ein Zeichen für eine schlechte Struktur und ein schlechtes Design ist.
Grundsätzlich würde ich dem Programmierer sagen, dass, wenn er Probleme hat, die 1 if-Anweisung zu lesen, C++ vielleicht nicht das ist, was er tun sollte.
Nehmen wir nun an, dass die Teile "a", "b" und "c" sehr groß sind, so dass das "OR" darin in einer Menge von Klammern oder ähnlichem untergeht.
Ich würde den Code trotzdem so umgestalten, dass er die Funktion nur an einer Stelle aufruft (oder den Code darin ausführt), also ist das vielleicht ein Kompromiss?
bool doExecute = false;
if (a) doExecute = true;
if (b) doExecute = true;
if (c) doExecute = true;
if (doExecute)
{
f();
}
oder, noch besser, auf diese Weise die Kurzschlüsse der booleschen Logik zu nutzen, um unnötige Auswertungen zu vermeiden:
bool doExecute = a;
doExecute = doExecute || b;
doExecute = doExecute || c;
if (doExecute)
{
f();
}