"constexpr if"比开关语句好吗?

Is "constexpr if" better than switch statement?

本文关键字:语句 开关 constexpr if      更新时间:2023-10-16

>C++17引入了"constexpr if",根据编译时条件进行实例化。

这是否意味着在模板函数中使用"constexpr if"比在 switch 语句中使用更好?

例如:

template<int val> void func()
{
    if constexpr(val == 0) {} else
    if constexpr(val == 1) {} else
    ...
    if constexpr(val == k) {} else {}
}
// vs
template<int val> void func()
{
    switch (val)
    {
        case 0:
            break;
        case 1:
            break;
        ...
        case k:
            break;
        default:
            break;
    }
}
引入

if constexpr是为了消除某些在条件为假的情况下格式不正确的分支。在您的情况下,您只在int上执行一些操作,因此如果另一个分支格式良好,则不应形成错误。使用它真的没有意义。

如上所述,使用 if constexpr 除了保证编译器将删除所有其他分支之外,没有提供真正的优势。但是我希望一个好的优化编译器也能在switch上做到这一点,因为val在实例化func时是一个常量。

我会使用switch语句,但这只是我。因此,请选择您喜欢的那个。