C++ throw装饰有什么用吗?

aka*_*ppi 14 c++ exception

我已经开始以统一的方式使用C++异常,现在我希望编译器(g ++)检查没有"异常泄漏".该throw装修应该这样做,好像const确实为类方法常量性.

嗯,事实并非如此.

使用throw仍然是纪录片,但如果其他人认为函数不能抛出其文档中列出的其他异常,则甚至可能会产生危险的误导.

可以说g ++以某种方式被说服对其抛出检查更加严格,即真正确保一个函数被装饰为throw()永远不会抛出任何东西.

编辑:发现此问题广泛处理该主题.

Kim*_*man 17

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

如果函数抛出其throw-declaration之外的任何内容,那么如果我没记错的话,C++运行时应该调用std :: unexpected.

  • Visual C++ 2008不支持这部分标准. (8认同)

phl*_*psy 8

我也建议看看这个文章有关异常的规格.它指出了这个C++特性的问题,如:

  • 这是一个影子类型系统
  • 编译器仅在运行时检查抛出的异常
  • 在抛出但未指定的异常的情况下,触发的默认行为通常是不可用的,并且经常被程序员误解