ein*_*ica 4 c++ c++17 c++20 if-constexpr
在C++ 17中,if constexpr介绍了; 然而,似乎没有switch constexpr(见这里).这是为什么?也就是说,如果一个编译器支持if constexpr,它支持它是否也是微不足道的switch constexpr(最坏的情况是if-then-else-if-etc.链,或多个如果带有一些标志来控制直通)?
Nic*_*las 13
if constexpr最终来自一个更理智的static if概念形式.由于这种推导,switch标准委员会似乎没有考虑应用相同的想法.所以这可能是主要原因:没有人将它添加到论文中,因为它是一种限制形式的语法,switch这是没有意义的.
话虽如此,其中switch有很多包袱.最值得注意的是自动穿透行为.这使得定义其行为有点问题.
请参阅,其中一个功能if constexpr是在某些条件下丢弃在编译时未采用的一方.这是语法的重要部分.因此,switch constexpr预期假设具有相似的权力.
对于fallthrough来说,这很难做到,因为case块不像if声明的两个块那样根本不同.特别是如果你有条件的通过.现在,您可以switch constexpr不进行自动穿透(或完全穿透),以便不同的部分是不同的.但是,你巧妙地改变了语法的工作方式; 非constexpr形式的switch行为与constexpr形式不同.这不好.
是的,您可以将编译错误设置为不在break;标签之间放置语句.
请注意,两个主要的模式匹配提议P1308和P1260,特别是避免使用switch,而是发明一个新的关键字.他们都有constexpr方面,但他们非常清楚,他们不是switch/case.