繁体   English   中英

catch(...)总是有意义吗?

[英]Does catch(…) always make sense?

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

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块(不重新抛出)时,您是在告诉周围的代码该异常已解决,程序可以继续正常运行。

当您在不了解异常的情况下捕获所有异常时,就无法断言一切都是正常的。 忽略意外异常总比吞没异常更好。 让呼叫者担心它们(可能是让他们转到呼叫者的呼叫者,依此类推)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM