是" constexpr如果"比switch语句更好?

时间:2017-06-12 16:09:35

标签: c++ c++17

C ++ 17介绍" constexpr如果"根据编译时条件实例化。

这是否意味着使用" constexpr更好?如果"在模板函数而不是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;
    }
}

1 个答案:

答案 0 :(得分:7)

引入了

if constexpr以消除某些条件错误的分支。在您的情况下,您只对int进行一些操作,因此如果另一个分支格式正确,则不应该分支不正确。使用它并没有多大意义。

如上所述,除了保证编译器将删除所有其他分支之外,使用if constexpr没有任何实际优势。但我希望有一个优秀的编译器也可以使用switch进行优化,因为valfunc实例化时是一个常量。

我会使用switch声明,但那只是我。所以,选择你喜欢的那个。