使用try {...} catch(..){...}代替转到

时间:2012-10-26 11:58:45

标签: c++ try-catch goto

使用像goto这样的try-catch是不好的做法? 例如,简单的代码

try{
    if(argc<2){
        std::cout<<"no inputfile"<<std::endl;
        throw 1;
    }
    STARTUPINFO cif;
    ZeroMemory(&cif,sizeof(STARTUPINFO));
    PROCESS_INFORMATION pi;
    if(FALSE==CreateProcess(argv[1],NULL,NULL,NULL,FALSE,NULL,NULL,NULL,
                            &cif,&pi)){
        printf("smth is wrong");
        throw 1;
    }
    WaitForSingleObject(pi.hProcess, INFINITE);
    GetExitCodeProcess(pi.hProcess, &exitCode);
    std::cout<<"Process return"<<exitCode<<std::endl;
    throw 1;
}
catch(int a){
    printf("press Enter");
    getchar();
}

2 个答案:

答案 0 :(得分:5)

如果您在询问是否对程序流使用异常是错误的,答案是是,这是错误的

也就是说,如果您不太关心性能,只要您不在互联网上告诉任何人,只要您没有生产要求,就可以侥幸逃脱或长期维护要求。

在这种情况下,您似乎正在为除最终成功案例之外的所有内容正确使用异常。

答案 1 :(得分:1)

一般而言(在语言无关的意义上,全面而言)使用try / catch机制作为控制流管理辅助是不好的做法。按预期使用它来管理异常。使用控制流构造来控制流程。