在java中,编译器抱怨未捕获的异常。
我在C ++中使用异常而我错过了这个功能。
那里有工具可以做到吗?也许是一个编译器选项(但我怀疑它)
答案 0 :(得分:3)
在C ++中确实没有办法做到这一点。但是很容易在程序的顶层提供默认的异常处理,这将捕获在较低级别中遗漏的任何内容。当然,您真的不希望在此级别捕获大多数异常,但您至少可以提供合理的诊断消息。
答案 1 :(得分:3)
答案 2 :(得分:1)
您必须在顶级捕获所有异常。通常这就足够了:
try {
//do stuff
} catch( std::exception& e ) {
// log e.what() here
} catch( YourCustomExceptionHierarchyRoot& e) {
// Perhaps you have smth like MFC::CException in your library
// log e.MethodToShowErrorText() here
} catch( ... ) {
// log "unknown exception" here
}
你需要在程序的顶层执行此操作(像main()一样)。
此外,如果您实现COM方法,则必须对每个暴露于COM的代码执行相同的操作 - 不允许通过COM边界抛出异常。
答案 3 :(得分:1)
Java有checked exceptions,这与C ++的实现方式不同。捕获所有异常的一种方法是...
语法,如下所示:
try
{
// code here can throw
}
catch ( const std::exception& stde )
{
// handle expected exception
}
catch ( ... )
{
// handle unexpected exceptions
}
还有一个运行时机制可以通过set_unexpected()
对意外异常做出反应,但它的用处是debatable。
首选方法是尝试撰写exception-safe code。