小编典典

如何抛出 C++ 异常

all

我对异常处理的理解非常差(即,如何为自己的目的自定义 throw、try、catch 语句)。

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

我希望该函数在 a 或 b 为负数时抛出带有某些消息的异常。

我应该如何在函数的定义中处理这个?


阅读 120

收藏
2022-04-06

共1个答案

小编典典

简单的:

#include <stdexcept>

int compare( int a, int b ) {
    if ( a < 0 || b < 0 ) {
        throw std::invalid_argument( "received negative value" );
    }
}

标准库附带了一个很好的内置异常对象集合,您可以抛出这些对象。请记住,您应该始终按值抛出并按引用捕获:

try {
    compare( -1, 3 );
}
catch( const std::invalid_argument& e ) {
    // do stuff with exception... 
}

每次尝试后可以有多个 catch() 语句,因此您可以根据需要分别处理不同的异常类型。

您还可以重新抛出异常:

catch( const std::invalid_argument& e ) {
    // do something

    // let someone higher up the call stack handle it if they want
    throw;
}

并且无论类型如何都捕获异常:

catch( ... ) { };
2022-04-06