const throw() 不是函数,这个东西叫异常规格说明,表示 what 函数可以抛出异常的类型,类型说明放到 () 里,这里面没有类型,就是声明这个函数不抛出异常,通常函数不写后面的就表示函数可以抛出任何类型的异常。
异常规格说明
1、异常规格说明的目的是为了让函数使用者知道该函数可能抛出的异常有哪些。 可以在函数的声明中列出这个函数可能抛掷的所有异常类型。例如:
void fun()throw(A,B,C,D);
2、若无异常接口声明,则此函数可以抛掷任何类型的异常。
3、不抛掷任何类型异常的函数声明如下:
#include
#include
usingnamespace std;
classMyException
{
public:
MyException(constchar*message)
: message_(message)
{
cout <<"MyException ..."<< endl;
}
MyException(constMyException&other): message_(other.message_)
{
cout <<"Copy MyException ..."<< endl;
}
virtual~MyException()
{
cout <<"~MyException ..."<< endl;
}
constchar*what()const
{
return message_.c_str();
}
private:
string message_;
};
classMyExceptionD:publicMyException
{
public:
MyExceptionD(constchar*message)
:MyException(message)
{
cout <<"MyExceptionD ..."<< endl;
}
MyExceptionD(constMyExceptionD&other)
:MyException(other)
{
cout <<"Copy MyExceptionD ..."<< endl;
}
~MyExceptionD()
{
cout <<"~MyExceptionD ..."<< endl;
}
};
void fun(int n)throw(int,MyException,MyExceptionD)
{
if(n ==1)
{
throw1;
}
elseif(n ==2)
{
throwMyException("test Exception");
}
elseif(n ==3)
{
throwMyExceptionD("test ExceptionD");
}
}
void fun2()throw()
{
}
int main(void)
{
try
{
fun(2);
}
catch(int n)
{
cout <<"catch int ..."<< endl;
cout <<"n="<< n << endl;
}
catch(MyExceptionD&e)
{
cout <<"catch MyExceptionD ..."<< endl;
cout << e.what()<< endl;
}
catch(MyException&e)
{
cout <<"catch MyException ..."<< endl;
cout << e.what()<< endl;
}
return0;
}