"constexpr if"比switch语句更好吗?

4 c++ c++17

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Rak*_*111 7

if constexpr被引入以消除某些错误形成的分​​支.在你的情况下,你只是在a上做一些操作int,所以如果另一个分支格式正确,那么分支不应该是格式错误的.使用它并没有多大意义.

如上所述,if constexpr除了保证编译器将删除所有其他分支之外,使用不提供任何实际优点.但我希望有一个优秀的编译器也可以使用switch,以及实例化val时的常量func.

我会用这个switch陈述,但那只是我.所以,选择你喜欢的那个.