Usando bools en cálculos para evitar ramas.
Aquí hay una pequeña curiosidad de micro-optimización que se me ocurrió:
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);
}
};
Parece que los dos métodos prácticamente hacen lo mismo. ¿La segunda versión evita una rama (y, en consecuencia, es más rápida que la primera versión), o cualquier compilador es capaz de hacer este tipo de optimización con-O3
?