Скажем, у меня есть функция:
template <bool stuff>
inline void doSomething() {
if(stuff) {
cout << "Hello" << endl;
}
else {
cout << "Goodbye" << endl;
}
}
И я называю это следующим образом:
doSomething<true>();
doSomething<false>();
Он выкинул бы:
Hello
Goodbye
Что мне действительно интересно, так ли компилятор полностью оптимизирует это? Когда я вызываю функцию templated с true, создаст ли она функцию, которая просто выведет "Hello" и избежит оператора if и кода "Goodbye"?
Это было бы действительно полезно для этой гигантской функции, которую я только что написал, которая должна быть очень оптимизирована и избежать как можно большего количества ненужных проверок if. У меня очень хорошее чувство, что это будет, по крайней мере, в выпуске с оптимизацией, если не в сборке отладки без оптимизации.