Рассмотрим следующее:
inline unsigned int f1(const unsigned int i, const bool b) {return b ? i : 0;}
inline unsigned int f2(const unsigned int i, const bool b) {return b*i;}
Синтаксис f2 более компактен, но выполняют ли стандартные гарантии, что f1 и f2 являются строго эквивалентными?
Кроме того, если я хочу, чтобы компилятор оптимизировал это выражение, если b и i известны во время компиляции, какую версию я должен предпочесть?