我已经开始以统一的方式使用C++异常,现在我希望编译器(g++)检查是否存在“异常泄漏”。throw装饰应该做到这一点,就像const对类方法的一致性所做的那样。
嗯,不是这样的。
使用throw仍然是记录性的,但如果其他人认为一个函数不能抛出文档中列出的异常之外的其他异常,那么它甚至可能具有危险的误导性。
能否以某种方式说服g++对其抛出检查更加严格,即真正确保装饰性为throw()的函数永远不会抛出任何东西。
编辑:发现this question广泛地处理这个主题。
发布于 2009-09-11 10:56:38
它不检查编译时,但符合的编译器应该在运行时确保它。
如果一个函数抛出了抛出声明之外的任何东西,那么如果我没记错的话,C++运行时应该调用std::unexpected。
发布于 2009-09-11 11:12:01
我还建议您查看有关异常规范的this文章。它指出了此C++功能的问题,如:
发布于 2009-09-11 11:03:00
基本上,只有当异常规范为空时,异常规范才有效。否则我会认为他们是一个失败的实验。请参阅phlipsy's answer原因。
https://stackoverflow.com/questions/1410226
复制相似问题