我开始以统一的方式使用C ++异常,现在我希望编译器(g ++)检查没有“异常泄漏”。 throw
装饰应该这样做,就像const
对类方法的常量一样。
嗯,事实并非如此。
使用throw
仍然是纪录片,但如果其他人认为函数不能抛出其文档中列出的其他异常,则可能会产生危险的误导。
g ++可以在某种程度上被说服对其抛出检查更加严格,即真正确保装饰为throw()
的函数永远不会抛出任何东西。
编辑: 找到this question广泛处理该主题。
答案 0 :(得分:17)
它不会检查编译时,但是符合标准的编译器应该在运行时确保它。
如果函数抛出其throw-declaration之外的任何内容,那么如果我没记错的话,C ++运行时应该调用std :: unexpected。
答案 1 :(得分:8)
我还建议您查看关于异常规范的this文章。它指出了这个C ++特性的问题,如:
答案 2 :(得分:2)
基本上,异常规范仅作为空异常规范。否则我认为他们是一个失败的实验。见phlipsy's answer为什么。
答案 3 :(得分:0)
我不知道检查器/编译器是否可以这样做。也许在函数声明中对它进行注释会更容易。好吧,它不是傻瓜证明,但如果人们看到可能会抛出一个异常,大多数人会在try和catch中包装函数调用。
//Can throw Exception
GetFoo();