捕获(...)总是有意义吗?

时间:2016-04-25 17:30:31

标签: c++ try-catch

抓住每个例外“只是为了确保”是否总是有意义的?例如:

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 ); 
}

1 个答案:

答案 0 :(得分:4)

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

当你在不知道它们是什么的情况下捕获所有异常时,你就不可能宣称一切正常。 忽略意外异常比吞下它们更好。让呼叫者担心他们(可能让他们去呼叫者的呼叫者,等等)。

您询问是否存在可能从该代码中抛出的任何其他异常。我不知道,你也不知道,抓住它们肯定没有意义。如果测试显示其他类型的异常,并且该位置是处理它们的正确位置,那么添加代码以在那里处理它们。但是,除非你知道会发生什么,否则请删除catch-all异常处理程序。