c++ 我应该在switch语句中的throw之后放置break吗?[副本]

mspsb9vt  于 2023-07-01  发布在  其他
关注(0)|答案(2)|浏览(166)

此问题已在此处有答案

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,这是一个可接受的解决方案吗?

xienkqul

xienkqul1#

A throw expression
...将控制权转移给具有匹配类型的异常处理程序,该异常处理程序的复合语句或跟随关键字try的成员初始值设定项列表最近被该执行线程输入且未被该线程退出。
因此,breakthrow之后不可访问,使得break不必要(事实上,它会对某些编译器产生警告),因此应该省略它。

monwx1rj

monwx1rj2#

在switch case语句中,break语句用于退出switch块并防止后续case的执行。当遇到throw语句时,它会立即引发异常,并将控制转移到catch块或调用代码。
在给定的场景中,选项2是正确的方法。在throw语句之后,不需要break语句,因为代码执行已经转移到catch块或调用代码。在选项1中的throw语句之后添加break语句将导致代码无法访问,因为控制流永远不会到达该点。
以下是选项2的正确版本:

switch(value) {
    case 1:
    case 2:
    case 3:
        throw APException();
    default:
        break;
}

请记住,在C++中,break语句用于退出switch块,而throw语句用于抛出异常并将控制转移到当前执行流之外。

相关问题