関数があるとしましょう:
template <bool stuff>
inline void doSomething() {
if(stuff) {
cout << "Hello" << endl;
}
else {
cout << "Goodbye" << endl;
}
}
そして、私はそれを次のように呼びます:
doSomething<true>();
doSomething<false>();
それは突き出ます:
Hello
Goodbye
私が本当に疑問に思っているのは、コンパイラがこれを完全に最適化するということですか? テンプレート化された関数を true で呼び出すと、"Hello" だけを出力し、if ステートメントと "さようなら" のコードを回避する関数が作成されますか?
これは、非常に最適化され、不要な if ステートメントのチェックを可能な限り回避するはずの、先ほど書いたこの 1 つの巨大な関数に非常に役立ちます。最適化なしのデバッグ ビルドではないにしても、少なくとも最適化ありのリリース ビルドではそうなるでしょう。