如果未处理异常,C ++中是否有任何方法可以获得编译时错误或警告?例如,请考虑以下Java代码段:
public void f()
{
g(); // <-- Java compiler reports "Unhandled exception" error here.
}
public void g() throws Exception
{
}
g ++或MSVC可以做类似的事吗?或者是否有任何外部代码解析工具可以做到这一点?我想可以通过编程方式扩展Eclipse CDT的C ++解析器来实现这一点,但是......有更简单的解决方案吗?
答案 0 :(得分:6)
简单,不。 C ++异常规范与Java的异常规范具有不同的含义,现在不推荐使用它们,因此如果可能,应考虑避免使用它们。
在C ++中,异常规范请求的检查仅在运行时强制执行。在C ++中,如果函数违反了其异常规范,则会调用“意外”处理程序。调用可能从具有异常规范的函数中抛出任意异常的函数不是编译时错误。
ISO / IEC 14882:2011 15.4 [except.spec] / 11:
实现不应仅仅因为执行时抛出或抛出包含函数不允许的异常而拒绝表达式。
答案 1 :(得分:0)
简答:不。 C ++中没有经过检查的异常。您可以尝试使用外部工具,但TBH我从未见过有人这样做过。只需正确记录接口即可。