C++ 1zは、 "constexpr if"を導入します。ifは条件に基づいて分岐の1つを削除します。合理的かつ有用であると思われる。"constexpr if" vs "if"(最適化あり) - なぜ "constexpr"が必要ですか?
しかし、constexprキーワードなしではできませんか?私はコンパイル時にコンパイラがコンパイル時に気分状態がわかっているかどうかを知っておくべきだと思います。そうであれば、最も基本的な最適化レベルでさえ不要な分岐を削除する必要があります。例えば
(godboltで参照:https://godbolt.org/g/IpY5y5を):
int test() {
const bool condition = true;
if (condition) {
return 0;
} else {
// optimized out even without "constexpr if"
return 1;
}
}
Godboltエクスプローラショー、-O0でさえGCC-4.4.7をコンパイル "1を返す"、そう、それはで約束されたものを達成しなかったことconstexpr if。明らかに、このような古いコンパイラは、条件がconstexpr関数の結果であるときにそうすることはできませんが、現実のままです:現代のコンパイラは、条件がconstexprかどうかを知っており、明示的にそれを伝える必要はありません。
そこで質問です:
なぜ "場合constexprの" に必要な "constexprのは、" ありますか?
最適化の問題だけでなく、 'constexpr if'のデッドブランチが無効であることが許されます。つまり、それ自身ではコンパイルされません。あなたの質問は立っている。 – Quentin