c++ - "constexpr if"比 switch 语句好吗?

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

最佳答案

if constexpr 的引入是为了在条件为假时消除某些格式错误的分支。在你的例子中,你只是在 int 上做一些操作,所以如果另一个分支是良构的,那么任何分支都不应该是良构的。使用它并没有什么意义。

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

我会使用 switch 语句,但那只是我。所以,选择你喜欢的。

关于c++ - "constexpr if"比 switch 语句好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44504025/

相关文章:

c++ - 以前版本的文件在 SMB 客户端中不可见

C++ for 循环(c++11 方式和旧版本方式)

c++ - 范围内的模板变量或模板 typedef

c++ - 并行 libstdc++ 模式不对迭代器使用并行 for_each 算法

c++ - 模板指定的参数数量

c++ - 将参数传递给另一个可变参数函数

c++ - 解码 Microsoft True Type 字体文件

c++ - 在 while 循环中评估 true 的 false 条件

c++ - 为什么 valarray 没有像 C++03 中的 vector 那样的交换函数?

c++ - 在类的洋葱中搜索