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;
}
}
答案 0 :(得分:7)
if constexpr
以消除某些条件错误的分支。在您的情况下,您只对int
进行一些操作,因此如果另一个分支格式正确,则不应该分支不正确。使用它并没有多大意义。
如上所述,除了保证编译器将删除所有其他分支之外,使用if constexpr
没有任何实际优势。但我希望有一个优秀的编译器也可以使用switch
进行优化,因为val
在func
实例化时是一个常量。
我会使用switch
声明,但那只是我。所以,选择你喜欢的那个。