C+有什么用处吗+;扔装饰品? 我已经开始以统一的方式使用C++异常,现在我希望编译器(g++)检查没有“异常泄漏”。throw装饰应该做到这一点,就像const对类方法的常量所做的那样

C+有什么用处吗+;扔装饰品? 我已经开始以统一的方式使用C++异常,现在我希望编译器(g++)检查没有“异常泄漏”。throw装饰应该做到这一点,就像const对类方法的常量所做的那样,c++,exception,C++,Exception,嗯,没有 使用throw仍然是一种记录,但如果其他人认为函数不能抛出文档中列出的异常以外的异常,则可能会产生危险的误导 g++是否能被说服在抛出检查方面更加严格,即真正确保被修饰为throw()的函数永远不会抛出任何东西 编辑: 我发现这个问题处理得很广泛。我不知道检查程序/编译器是否能做到这一点。也许在函数声明中注释它更容易。当然,这不是傻瓜式的,但是如果人们看到可能会抛出异常,那么大多数人都会将函数调用包装在try-and-catch中 //Can throw Exception GetFo

嗯,没有

使用
throw
仍然是一种记录,但如果其他人认为函数不能抛出文档中列出的异常以外的异常,则可能会产生危险的误导

g++是否能被说服在抛出检查方面更加严格,即真正确保被修饰为
throw()
的函数永远不会抛出任何东西

编辑:
我发现这个问题处理得很广泛。

我不知道检查程序/编译器是否能做到这一点。也许在函数声明中注释它更容易。当然,这不是傻瓜式的,但是如果人们看到可能会抛出异常,那么大多数人都会将函数调用包装在try-and-catch中

//Can throw Exception
GetFoo();

它不检查编译时,但是符合条件的编译器应该在运行时确保它


如果函数抛出任何抛出声明,C++运行时应该调用STD::如果我正确地记得,意外的。

基本上,异常规范只作为空异常规范好。否则我认为这是一个失败的实验。看看为什么

我还建议看一下关于异常规范的文章。指出了C++特性的一些问题:
  • 这是一个阴影类型的系统
  • 编译器仅在运行时检查抛出的异常
  • 在抛出但未指定异常的情况下,触发的默认行为通常不可用,并且经常被程序员误解

这里也有类似的问题:这也是我的理解。你为什么要这么做我不知道。我个人认为
GetFoo()//throws(std::runtime\u error)
比未注释的等效程序有用得多——这只是给我代码的使用者的一个提示。正确。编译时检查的实际问题是大多数现有的C++代码没有抛出规范。Visual C++ 2008不支持这部分标准。@ Kirill:有趣,我不知道。更新:据我所见,VS 2012仍然不支持标准的那部分。