如果一个函数抛出一个并未列于其exception specifiction的异常,这个错误会在运行时刻被检验出来,于是特殊函数unexpected会被自动调用。unexpected的默认行为是调用terminate,而terminate的默认行为是调用abort,所以如果程序违反exception specifiction,默认结果是程序被中止。
extern void f1();
void f2() throw(int)
void f2() throw(int)//C++中这种写法是完全合法的
{
...
f1();
....
}
千万不要为template提供意味深长的exception spcifiction,因为template
几乎必然会以某种方式使用其类型参数。结论是:不应该将templates和exception specifictions混合使用。
More Effective C++---14th