最近在看 poco c++ 一个非常好的 poco c++ 框架。在看的时候发现一个语句不是很理解。
const char* Exception::what() const throw()
所有百度了一下。
记录如下:
它是函数提供者和使用者的一种约定,即提供者告诉使用者。此函数会抛出哪个异常。
func() throw(type) ,会抛出type异常
func() throw(),不会抛出
func() throw(…),可能是任何类型的异常
还需要注意的是。如果,我们函数已经标明为 throw()
那么你 try{}catch(…) 是不起作用的,程序直接 abort。
#include <iostream>
class myexception : public std::exception
{
public:
const char* what() const throw ()
{
std::cout << "my exception" << std::endl;
return NULL;
}
};
void f1(bool flag = true)
{
if (flag) throw myexception();
}
void f2(bool flag = true) throw ()
{
if (flag) throw myexception();
}
int main(void)
{
try
{
f1();
} catch (...)
{
}
std::cout << "f1()异常将被捕获,不会 abort,将继续执行" << std::endl;
try
{
f2();
} catch (...)
{
}
std::cout << "f2()异常不会被捕获,程序将会 abort,将不会执行该条语句" << std::endl;
return 0;
}