Использование bools в расчетах, чтобы избежать веток

Вот небольшое любопытство микрооптимизации, которое я придумал:

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);
    }
};

Кажется, что два метода практически делают одно и то же. Избегает ли вторая версия ветвления (и, следовательно, быстрее, чем первая версия), или любой компилятор способен выполнить такую оптимизацию с-O3?

Ответы на вопрос(2)

Ваш ответ на вопрос