我想知道是否有一些编译器参数,最好是gcc(g ++),它将缺少try / catch块视为错误。这是java中的标准行为,我总是喜欢它。
答案 0 :(得分:8)
由于Java中的已检查异常依赖于throw
签名,因此您可以在SO this question中了解您不希望在C ++中使用throw
函数签名的原因。
答案 1 :(得分:1)
嗯,使用异常规范通常是一个坏主意:http://cplusplus.co.il/2009/10/06/exception-specifications/
如果不使用这些,编译器基本上无法知道可能抛出哪个异常,因此无法做到这一点。
你可以做的是提供你自己的std :: terminate实现(通过调用std :: set_terminate())并处理未捕获的异常。
答案 2 :(得分:0)
在C ++中可以用异常做的一件事是在函数上使用异常规范。这并不会主动阻止未列出的异常从该函数中抛出,但它会使它们出错(并将它们全部映射到预定义的unexpected()
。
所以int f() throw ();
是C ++,用于“将从函数f中引发的任何异常视为错误”。