3.1.7 无条件转移
if语句提供了根据指定条件选择执行哪组语句的灵活性,因此程序中语句的执行顺序因数值的不同而不同。与此相反,goto语句却很死板。该语句允许无条件转移到指定的程序语句。位于转移目的地的语句必须用某个语句标签来标识,这种标签也是按照定义变量名的规则来定义的标识符。语句标签后面应该跟一个冒号,还应该放在需要标记的语句前面。下面是一条被标记语句的示例。
- myLabel: cout << "myLabel branch has been activated" << endl;
该语句的标签是myLabel,无条件转移到这条语句的语句如下所示:
- goto myLabel;
只要可能,就应该避免在程序中使用goto语句。这些goto语句往往导致错综复杂的、难以理解的代码。
理论上,程序中的goto语句不是必需的,因为总有替代goto语句的方法,所以某些程序员声称应该永远不使用goto语句。笔者不同意这样的极端观点。goto语句毕竟是一条合法语句,而且在有些场合下使用起来很方便,例如必须从一个深度嵌套的循环(下一节将介绍)中退出时。但是,笔者还是建议仅当能够看到明显优于其他可用选择时才使用goto;否则,可能得到难以理解、更难以维护的、错综复杂且容易出错的代码。