简介: Java中的,如果没有捕获异常,您的代码甚至不会编译,编译器会在未处理的异常上崩溃。
问题:在这种情况下,有没有办法告诉GCC“严格”,并对未处理的异常提出错误或至少警告?
如果没有--是否有IDE(请用于Unix )可以突出显示这种情况作为警告?
发布于 2014-09-29 07:56:06
这在C++中是不可能的。异常规范是函数声明的一部分,而不是其类型的一部分。任何间接调用(通过指针或虚拟调用)都会完全删除有关异常的任何信息。
无论如何,在C++11中,都不推荐使用异常规范来支持noexcept,因此不太可能有任何编译器费心地增强这种语言特性。
发布于 2014-09-29 07:40:50
C++函数的唯一保证是它从不抛出异常:
void f() noexcept;但是,当抛出异常时,这将在运行时终止程序。它没有在编译时被验证。
如果要确保错误得到处理,可以得到的最接近的值是返回一个类型的值,该类型用一个成员函数包装boost::variant<OK, Error>,该成员函数接受两个回调:一个回调用于OK大小写,一个用于Error大小写。
发布于 2014-09-29 08:02:52
您可以随时使用:
int main()
{
try {
... your usual main ...
}
catch(...)
{
std::cerr << "Unhandled exception caught" << std::endl;
}
}然而,这是一个相当糟糕的解决办法。
不幸的是,C++的特性使我们很难捕捉到某些东西抛出异常而无法处理的情况,因为几乎所有的东西都有抛出异常的可能性。我只能想到代码评审--也许代码分析工具,比如围绕嘎吱声构建的工具,将具有这样的能力,但它可能不会100%准确。事实上,我甚至不确定Clang目前是否完全理解抛出/尝试/捕捉,因为它似乎没有捕捉到一些相当基本的错误,checkers.html (请参阅“异常”标题)。
https://stackoverflow.com/questions/26094739
复制相似问题