Использование 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
?