捕获每个异常只是为了确保总是有意义吗?例如:

try
{
    Socket_Listen();

    if(Return_Value == SOCKET_ERROR)
    {
        throw SOCKET_LISTEN_ERROR;
    }

    __LOG__ << "Listening..." << endl;
}

catch(EError_ID)
{
    __LOG__;
    Get_Last_Error_As_String( __FUNCTION__ );
}

catch(...)
{
    __LOG__ << "WARNING: An unknown error occurred." << endl;
}

我抛出了一个我自己定义的错误(SOCKET_LISTEN_ERROR),它是一个包含多个错误ID的较大枚举的一部分。除了我抛出的异常之外,这里是否还有其他异常抛出?为了完整起见,这是Socket_Listen():
void CTCPServer::Socket_Listen()
{
    Return_Value = listen( Socket,
                           2 );
}

最佳答案

相反,捕获每个异常很少有意义。当您退出catch块(不重新抛出)时,您将告诉周围的代码异常已解决,程序可以继续正常运行。

当您在不了解所有异常的情况下捕获所有异常时,就不可能宣称一切都正常。忽略意外异常总比吞没异常更好。让 call 者为他们担心(可能通过让他们转到 call 者的 call 者,以此类推)。

您询问是否可以从该代码中引发其他任何异常。我不知道,你也不知道,所以捕获他们当然是没有意义的。如果测试发现其他种类的异常,并且该位置是处理它们的正确位置,则添加代码以在那里处理它们。不过,在知道期望的内容之前,请删除全部捕获异常处理程序。

关于c++ - catch(...)总是有意义吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36847261/

10-11 22:09