我们在哪里可以使用"尝试捕获"和例外?

时间:2018-03-14 06:53:36

标签: visual-c++

如何抛出C ++异常 c ++异常处理 我对异常处理的理解很差(即,如何根据自己的目的自定义throw,try,catch语句)。

例如,我已经定义了一个函数,如下所示:int compare(int a,int b){...}

当a或b为负数时,我喜欢使用某些消息抛出异常的函数。

我应该如何在函数的定义中解决这个问题?

1 个答案:

答案 0 :(得分:1)

完全没有。

该函数的定义保持

int compare(int a, int b);

是否抛出异常(忘记throw(exception),它被视为bad practice并且已被弃用)。

如果您想要在a或b为负数时抛出异常,则将此代码放入方法实现中:

int compare(int a, int b)
{
    if(a < 0 || b < 0)
    {
        throw std::logic_error("a and be must be positive");
    }

    // the comparing code here
}

这就是方法抛出所需的全部内容。请注意,您需要#include <stdexcept>

对于调用代码(例如main),您可以这样做:

int result;

try
{
    result = compare(42, -10);
}
catch(const std::logic_error& ex)
{
    // Handle the exception here. You can access the exception and it's members by using the 'ex' object.
}

请注意我们catch子句中catch the exception as a const reference的方式,以便您可以访问ex.what()等异常成员,这些成员会为您提供异常消息,在本例中为

  

“a并且必须是积极的”

请注意。 您当然可以抛出其他异常类型(甚至是您自己的自定义异常),但是对于此示例,我发现std::logic_error最合适,因为它报告了a faulty logic