我对异常处理的理解非常差(即,如何为自己的目的自定义 throw、try、catch 语句)。
例如,我定义了一个函数如下:int compare(int a, int b){...}
int compare(int a, int b){...}
我希望该函数在 a 或 b 为负数时抛出带有某些消息的异常。
我应该如何在函数的定义中处理这个?
简单的:
#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( ... ) { };