"constexpr if"比开关语句好吗?
Is "constexpr if" better than switch statement?
>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
语句,但这只是我。因此,请选择您喜欢的那个。
相关文章:
- C 和 C++ 中开关语句的案例标签的常量值,但显示不同的行为
- 为什么布尔开关语句有编译器警告?
- 如何使用"equal to"以外的评估编写开关语句
- 有没有办法在C++将字符串与开关语句一起使用?
- 带有开关语句的 do-while 循环 -- 无穷循环错误
- 如何在不同的开关大小写语句上使用对象的类成员函数?
- C++实用程序,用于将长开关语句转换为封装开关案例阶梯的简洁函数调用
- 如何循环开关语句直到找到所需的数字?
- 使用开关大小写语句抽取随机扑克牌等级和花色以显示用户
- 带有关闭/打开布尔值的开关语句
- 清理开关语句
- 我的开关语句在C++中不起作用
- 枚举和开关语句C++
- 如何在开关语句中使用 cin "as a parameter"
- 重构开关或 if/else 语句?
- "constexpr if"比开关语句好吗?
- C++ 默认值在开关语句中不起作用
- 初学者C :为什么此开关语句给我一个错误
- C 开关语句无法正常工作
- 为什么允许在开关语句中声明变量?但不是声明 初始化