C++11 默认指定析构函数noexcept
。有没有办法让 Clang 报告我的noexcept
析构函数可能抛出异常(并因此调用std::terminate
)的情况?
问问题
625 次
1 回答
1
首先,C++ 默认没有指定析构函数noexcept
。
它将它们指定为noexcept(all subobjects destructors are noexcept)
.
接下来,我们可以将表达式和语句分别归为一个类别:
- 永远不会回来,可能会回来,总是会回来。
- 从不投掷,可能投掷,总是投掷。
在所有这些中,只有第一种情况会被标记为异常。
为了给出好的结果,编译器必须能够充分分析程序行为,以确定对于任何可能的状态是否曾经执行过抛出表达式。
如果您对太多关于不可能场景的警告感到满意,您可以在此处获得结果。
相反,如果您只想警告明显的案例,您也可能会得到一些结果。
麻烦的是,所有有趣的案例都转向解决停机问题。
不,我们不再支持它。
于 2014-11-10T22:25:14.817 回答