除了向后兼容性之外,C++20 是否仍将 goto 作为语句包括在内?

Is there any reason, apart from backward compatibility, for which C++20 is still including goto as a statement?

我想补充一下,您知道将来是否有意将其删除吗?

是因为当您编写低级代码(例如,可能混合使用 C++ 和汇编程序)时,它不是那么妖魔化的语句吗?

在编写程序以生成 C 或 C++ 源代码以执行某些任务时(例如,将代码从其他语言转换为 C 或 C++ 时),输出的结构组合通常与如果直接编写 C 或 C++ 代码,将使用的构造范围。如果一个人正在为一种语言编写转译器,该语言具有一些 C 和 C++ 在不使用 goto 的情况下无法方便地支持的控制结构,允许转译器使用 goto 实现此类结构通常会使事情变得更加比要求它添加标志或其他类似的 hackery 来解决缺少 goto.

更方便

I would add, do you know if there are any intentions to remove it in the future?

不,没有。它从未被提议过,如果被提议,它几乎会被委员会普遍嘲笑。不仅仅是因为 BC,还因为这个想法的优点。

goto 是一种边缘有用的工具,但它 有用 。大多数新的 C++ 程序员甚至在入门学习中都没有学习 goto 是如何工作的,因此并没有出现大量滥用该功能的人。删除它没有任何好处,除了迎合纯粹主义者,他们认为“Goto 认为有害”不是建议,甚至不是默认立场,而是 宗教教义.

在复杂的情况下,goto 是您可用的各种控制流结构中最不糟糕和最清晰的。它们可能很少见,但确实存在,因此删除该功能没有任何好处。

在汇编级别,只有goto。没有牙套。 Jmps 真的是 gotos。 C++ 一直试图使一切成为可能。因此 goto 不会被删除。 99.99% 的应用不需要它,但 0.01% 需要。

它也很容易在编译器中实现。

此外,goto 现在不太可能被滥用。有多少学生甚至学会了有这样一个关键词?即使他们真的注意到它,他们也不太可能知道在哪里使用它。回到意大利式编码时代,Goto 很危险,但今天不是。