此问题已在此处有答案:
Can throw be used instead of break in a switch statement?(7个回答)
昨天关门了。
我应该在switch case语句中的throw之后放一个break吗?
选择1:
switch(value){
case 1:
case 2:
case 3:
throw APException();
break;
default:
break;
}
备选方案二:
switch(value){
case 1:
case 2:
case 3:
throw APException();
default:
break;
}
我想如果我在抛出后放一个break,它会给予我一个编译错误。那么,考虑到选项2,这是一个可接受的解决方案吗?
2条答案
按热度按时间xienkqul1#
A
throw
expression:...将控制权转移给具有匹配类型的异常处理程序,该异常处理程序的复合语句或跟随关键字try的成员初始值设定项列表最近被该执行线程输入且未被该线程退出。
因此,
break
在throw
之后不可访问,使得break
不必要(事实上,它会对某些编译器产生警告),因此应该省略它。monwx1rj2#
在switch case语句中,break语句用于退出switch块并防止后续case的执行。当遇到throw语句时,它会立即引发异常,并将控制转移到catch块或调用代码。
在给定的场景中,选项2是正确的方法。在throw语句之后,不需要break语句,因为代码执行已经转移到catch块或调用代码。在选项1中的throw语句之后添加break语句将导致代码无法访问,因为控制流永远不会到达该点。
以下是选项2的正确版本:
请记住,在C++中,break语句用于退出switch块,而throw语句用于抛出异常并将控制转移到当前执行流之外。