尝试/捕捉整个程序

Ker*_*ael 3 c++ exception try-catch

我习惯于构建我的C++项目,如下所示:

int main(int ac, char* av[])
{
    try
    {
       Object    foo;

       foo.run()
       /* ... */
    }
    catch (const std::exception& e)
    {
       std::cerr << e.what() << std::endl;
       return 1;
    }
    catch (...)
    {
       std::cerr << "Unknown error." << std::endl;
       return 1;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想知道这是一个好习惯,还是在"预期"产生错误的小块代码上使用try/catch块更好?

das*_*ght 5

通常,捕获所有异常并不是一个好主意:您只想捕获您的特定代码片段已准备好以有意义的方式处理的这些异常.

但是,顶级入口点是此规则的一个例外:如果您希望控制在顶层处理异常的方式,则通常会自行捕获所有异常.

然而,实现它的一种常见方法是编写一个看起来像main但具有不同名称的函数:

int entryPoint(int argc, char *argv[]) {
    ... // The real logic goes here
    Object    foo;

    foo.run()
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

你的代码看起来像这样,永远不会改变:

int main(int ac, char* av[])
{
    try
    {
        return entryPoint(ac, av);
    }
    catch (const std::exception& e)
    {
       std::cout << e.what() << std::cerr;
    }
    catch (...)
    {
       std::cout << "Unknown error." << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)