A有一个概念性的问题。考虑一个C ++函数,它捕获所谓的由它调用的代码抛出的所有可能异常,它看起来像
void func() {
try {
// lots of stuff that may throw
} catch(...) {
// handle exceptions, NOTHING here throws.
}
}
我的问题是:此功能是否符合noexcept
的条件?是否应该这样声明?我有这个疑问,因为它内部可能存在异常传播,但调用者代码永远不会收到。
答案 0 :(得分:2)
来自C ++ 11标准的Exception specifications, Section 15.4/2:
具有非抛出异常规范的函数不允许任何异常。
如果catch
块中的代码保证不抛出任何异常,则该函数可以具有非抛出异常规范。即你可以使用:
void func() throw () { ... }
或
void func() noexcept { ... }
或
void func() noexcept(true) { ... }