gpt4 book ai didi

c++ - 如果有 if-constexpr,为什么没有 switch-constexpr?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:35 26 4
gpt4 key购买 nike

在 C++17 中,if constexpr被介绍;然而,似乎没有switch constexpr(参见here)。这是为什么?也就是说,如果编译器支持 if constexpr,那么支持 switch constexpr(最坏情况下作为 if-then-else-if-etc。链,或多个 if 带有一些标志来控制 fallthrough)?

最佳答案

if constexpr最终源自 more sane formstatic if concept .由于这种推导,标准委员会似乎没有考虑将相同的想法应用于 switch。所以这可能是主要原因:没有人将它添加到论文中,因为它是语法的一种限制形式,其中 switch 没有意义。

也就是说,switch 有很多包袱。最值得注意的一点是自动 fallthrough 行为。这使得定义其行为有点问题。

请看,if constexpr 的强大功能之一是在特定条件下丢弃编译时未采用的一侧。这是语法的重要部分。因此,假设的 switch constexpr 应该具有类似的权力。

这对于 fallthrough 来说要难得多,因为 case block 不像 if 语句的两个 block 那样根本不同。尤其是当您有条件失败时。现在,您可以使 switch constexpr 没有自动 fallthrough(或根本没有 fallthrough),以便不同的部分是不同的。但是你已经巧妙地改变了语法的工作方式; switch 的非 constexpr 形式与 constexpr 形式的行为不同。那可不好。

是的,如果不在标签之间放置 break; 语句,可能会导致编译错误。

请注意两个主要的模式匹配提案,P1308P1260 ,特别是避免使用switch,而是发明一个新的关键字。它们都有 constexpr 方面,但它们非常清楚它们不是 switch/case

关于c++ - 如果有 if-constexpr,为什么没有 switch-constexpr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53379143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com