【发布时间】:2017-12-29 05:05:51
【问题描述】:
C++14 对在 constexpr 函数中可以做什么和不可以做什么有规则。其中一些(没有asm,没有静态变量)似乎很合理。但标准也不允许在constexpr 函数中使用goto,即使它允许其他控制流机制。
这种区别背后的原因是什么?
我以为我们已经过去了“goto 对于编译器来说很难”。
【问题讨论】:
-
这是非常不可预测的,即使对于编译器也是如此。
-
@user0042 goto 仍然有它的用途,它是一个有效且需要的构造
-
@user0042 我不这么认为。你要破坏的代码量可能是巨大的。此外,
goto确实有其罕见的用途——比如打破深度嵌套循环的多层。我的信念是goto不是一个糟糕的构造因此 - 你应该非常非常小心 在你使用它的地方(通常你不应该)。 -
@user0042:Böhm-Jacopini 定理告诉你,你总是可以替换 goto,但代价是什么?一个很好的 goto 用于打破深度嵌套循环或用于 C 风格的错误清理通常比结构化编程解决方法更清晰。
-
你们可以继续讨论这个话题吗?这里不是讨论“goto 利弊”的地方。
标签: c++ c++14 language-lawyer constexpr goto