|
我从网上查到资料如下:
C++函数后面后加到关键字throw(something)限制,是对这个函数的异常安全性作出限制。
void f() throw() 表示f不允许抛出任何异常,即f是异常安全的。
void f() throw(...) 表示f可以抛出任何形式的异常。
void f() throw(exceptionType); 表示f只能抛出exceptionType类型的异常。
来一段测试代码:
#include <iostream>
using namespace std;
void Test() throw()
{
cout<<"抛出一个异常,测试!"<<endl;
throw 5;
}
void main()
{
try
{
Test();
}
catch(int value)
{
cout<<"接收到异常value="<<value<<endl;
}
}
接下来我要一一验证上面所说的到底是对还是错?(但愿验证方法没错):
其它地方如上代码均不动,我们只改动void Test() throw()这一句来进行试验:
1. void f() throw() 表示f不允许抛出任何异常,即f是异常安全的
//-------------------------------------------------------------------
void Test() throw()
运行结果:
抛出一个异常,测试!
接收到异常value=5
//-------------------------------------------------------------------
函数Test()被标记为throw(),怎么还能够抛出异常呢?
2. void f() throw(...) 表示f可以抛出任何形式的异常
//-------------------------------------------------------------------
void Test() throw(...)
函数编译有误
//-------------------------------------------------------------------
编译错误,原因应该是不能识别"...",哎,为什么?为什么?
3. void f() throw(exceptionType); 表示f只能抛出exceptionType类型的异常。
//-------------------------------------------------------------------
void Test() throw(int)
运行结果:
抛出一个异常,测试!
接收到异常value=5
//-------------------------------------------------------------------
只有这个正常
救命啊:
为什么只有第3种情况行,1、2种情况出了问题?
当然您可以参考MSDN:
http://msdn.microsoft.com/en-us/library/6dekhbbc(VS.80).aspx
这上面我觉得和网上的说的是一样的...
请大家帮忙看看.....
thank you , thank you.... |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|