“constexpr if”比switch语句更好吗?

4

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;
    }
}

6
你需要定义“更好”的含义。是更高效吗?这将取决于编译器的实现。更容易阅读吗?我个人偏爱使用switch语句,但这只是我的主观意见。 - Ferruccio
1
如果每个case是一个简单的整数或枚举,那么使用Switch会更易于阅读,并且您可以免费获得重复检查。 - Dave S
1个回答

7

if constexpr被引入是为了消除在条件为false时产生的某些不合法分支。在您的情况下,您只对一个int执行一些操作,因此如果另一个分支合法,则不应该有任何分支不合法。使用它没有真正意义。

如上所述,使用if constexpr除了保证编译器将删除其他每个分支外,没有任何实际优势。但是我希望使用switchval在实例化func时是常量的优化良好的编译器也会这样做。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接