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++ - "constexpr if"比 switch 语句好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44504025/