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