除了向后兼容之外,还有什么理由让 C++20 仍然将 goto 作为语句包含在内?

问题描述

我想补充一下,你知道未来是否有删除它的意图吗?

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

解决方法

我想补充一下,你知道未来是否有删除它的意图吗?

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

goto 是一个边际有用的工具,但它有用。大多数新的 C++ 程序员在他们的介绍性学习中甚至没有学习 goto 是如何工作的,所以不会有大量的人滥用该功能。删除它没有任何好处,除了迎合那些认为“Goto 认为有害”不是作为建议甚至是默认立场,而是作为宗教教义的纯粹主义者。

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

,

编写程序以生成 C 或 C++ 源代码以执行某些任务时(例如,将其他语言的代码转换为 C 或 C++ 时),输出的结构组合通常与范围大不相同如果直接编写 C 或 C++ 代码,将使用的构造。如果您正在为一种语言编写转译器,该语言具有一些 C 和 C++ 不使用 goto 就不能方便地支持的控制结构,那么允许转译器使用 goto 来实现这样的结构通常会使事情变得更加复杂比要求它添加标志或其他类似黑客来解决缺少 goto 的问题更方便。

,

在程序集级别,只有转到。没有大括号。 jmps真的是goto。 C++ 一直试图让一切成为可能。因此不会删除 goto。 99.99% 的应用不需要它,但 0.01% 需要。

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

此外,goto 现在不太可能被滥用。有多少同学竟然学会了有这样的关键词?如果他们确实注意到了它,他们就不太可能知道在哪里使用它。 Goto 在意大利面编码时代很危险,但在今天不是。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...