抛出异常

异常是运行期出现的情况,编译不会报错。如果出现异常,它后面的代码不会执行,一般会显示 The program has unexpectedly finished. </font>。如果能处理好异常,就可以让后面的代码继续运行

throw就是抛出异常,后面可以接任何语句表示异常。比如throw 123;, throw "exception";

try里面的第一个语句必须包含throw,可以是个函数。之后的语句不再进行,直接进catch了

catch的参数是和throw一致的,比如下面的const char*,如果要catch任何类型,小括号内换成...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double division(int a, int b)
{
if( b == 0 )
throw "Division by zero condition!";
return (a/b);
}


try {
cout << division(1,0) <<endl;
cout << "本句不执行" <<endl;
}
catch(const char* msg)
{
cerr << msg << endl; // 输出错误用cerr
}

C++ 提供了一系列标准的异常,定义在,我们可以在程序中使用这些标准的异常。它们是以父子类层次结构组织起来的。可以使用catch(std::exception e)

一些第三方库也提供了异常,使用时要注意。比如log4cpp:

1
2
3
4
5
6
7
8
try
{
log4cpp::PropertyConfigurator::configure(config_base_path+"setting.conf");
}
catch (log4cpp::ConfigureFailure& f)
{
std::cout << "Configure Problem: " << f.what() << std::endl;
}

假如程序运行前没有配置文件,而且没有使用异常机制,后面的程序就没法运行了。这不一定是我们想要的,我们不一定要求log4cpp的运行,所以使用异常就很合适了。