Verwenden von Bools in Berechnungen, um Verzweigungen zu vermeiden

Hier ist eine kleine Neugier der Mikrooptimierung, die ich mir ausgedacht habe:

struct Timer {
    bool running{false};
    int ticks{0};

    void step_versionOne(int mStepSize) {
        if(running) ticks += mStepSize;
    }

    void step_versionTwo(int mStepSize) {
        ticks += mStepSize * static_cast<int>(running);
    }
};

Es scheint, dass die beiden Methoden praktisch dasselbe tun. Vermeidet die zweite Version eine Verzweigung (und ist folglich schneller als die erste Version), oder ist ein Compiler in der Lage, diese Art der Optimierung durchzuführen?-O3?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage