为什么要加一个throw()到你的函数中?
 这是异常规范,只会出现在声明函数中,表示这个函数可能抛出任何类型的异常
 void GetTag() throw(int);表示只抛出int类型异常
 void GetTag() throw(int,char);表示抛出in,char类型异常
 void GetTag() throw();表示不会抛出任何类型异常
 void GetTag() throw(...);表示抛出任何类型异常
 void GetTag() throw(int);表示只抛出int类型异常
 并不表示一定会抛出异常,但是一旦抛出异常只会抛出int类型,如果抛出非
 int类型异常,调用unexsetpion()函数,退出程序。
 假如你加一个throw()属性到你的永远不会抛出异常的函数中,编译器会非常聪明的知道代码的意图和决定优化方式。考虑下面的代码:
 显示代码打印01 class MyClass  
 02 {  
 03     size_t CalculateFoo()  
 04     {  
 05         :  
 06         :  
 07     };  
 08     size_t MethodThatCannotThrow() throw()  
 09     {  
 10         return 100;  
 11     };  
 12     void ExampleMethod()  
 13     {  
 14         size_t foo, bar;  
 15         try 
 16         {  
 17             foo = CalculateFoo();  
 18             bar = foo * 100;  
 19             MethodThatCannotThrow();  
 20             printf("bar is %d", bar);  
 21         }  
 22         catch (...)  
 23         {  
 24         }  
 25     }  
 26 }; 
 当编译器看到这个带"throw()"属性代码的时候,编译能够优化这个"bar"变量,因为它知道从MethodThatCannotThrow()函数中不会抛出任何的异常。如果没有这个throw()属性,编译器必须创建这个"bar"变量,因为假如MethodThatCannotThrow抛出了一个异常,这个异常句柄可能会需要依靠这个bar变量。
 另外,象prefast源代码分析工具能够(也会)用throw()注释去优化他们的错误检测能力----举个例子,假如你有一个try/catch而且所有调用的函数都已经标记了throw(),实际上你不需要这个try/catch(是的,假如你最后调用的函数可能抛出异常这就会有个问题了)。
 
转载于:https://www.cnblogs.com/spring3/archive/2012/03/08/2400950.html