为什么不允许在constexpr函数中转到?

Sne*_*tel 22 c++ goto language-lawyer constexpr c++14

C++ 14规定了constexpr函数中可以做什么和不可以做什么.其中一些(不asm,没有静态变量)似乎很合理.但该标准也不允许gotoconstexpr功能,尽管它允许其他控制流机制.
这种区别背后的原因是什么?
我以为我们过去了" goto很难编译 ".

Bar*_*rry 16

我的理解是希望constexpr在C++ 14中获得轻松的语义.放松的许多限制很简单,但有些更具争议性或难度,或者[插入你选择的形容词].决定只发布主要变化并推迟其余部分,而不是constexpr仅仅因为使用能力而放松goto.这似乎是一个非常合理的选择,因为constexpr在C++ 14中,它比constexprC++ 11 强大得多,并且不能使用goto是一个相当小的缺席,所有事情都考虑在内.

也就是说,当然存在这样的观点,即gotoconstexpr上下文中既有用也有可能.事实上,最初的放松建议constexpr允许它.所以可能只需要有人想要写一个提议来添加它.有人可能是你!两年前在N4472中显然是Ville Voutilainen ,其中包含与以下问题相关的非常相关的段落:

有一个未经证实的传闻,根据这个传闻,在常量表达式中禁止goto更多是出于品味原因而不是技术原因,这意味着在常量表达式中支持goto并不是特别难以实现.我不能说这对于一般的实现是否正确.

这篇文章有不同的接受,但现在我们有了constexpr lambdas,也许需要重新审视.而人可能就是你!

  • 当然,但是在某些时候有人不得不说"好吧,for循环很好,但是一般的'goto`有一个问题".为什么分娩治疗?什么会使'goto`更具争议性,或更难,或[其他形容词]? (4认同)