C++ использует шаблоны, чтобы компилятор не проверял логическое значение

Допустим, у меня есть функция:

template <bool stuff>
inline void doSomething() {
    if(stuff) {
        cout << "Hello" << endl;
    }
    else {
        cout << "Goodbye" << endl;
    }
}

И я называю это так:

doSomething<true>();
doSomething<false>();

Выскочит:

Hello
Goodbye

Мне действительно интересно, полностью ли компилятор это оптимизирует? Когда я вызываю шаблонную функцию со значением true, будет ли она создавать функцию, которая просто выводит «Привет» и избегает оператора if и кода для «До свидания»?

Это было бы очень полезно для этой гигантской функции, которую я только что написал, которая должна быть очень оптимизирована и избегать как можно большего количества ненужных проверок операторов if. У меня очень хорошее предчувствие, что так и будет, по крайней мере, в релизной сборке с оптимизацией, если не в отладочной сборке без оптимизаций.

18
задан iseletsky 19 August 2012 в 22:28
поделиться