是一个C ++函数捕获其中的所有异常“noexcept”?

时间:2017-11-11 20:55:58

标签: c++

A有一个概念性的问题。考虑一个C ++函数,它捕获所谓的由它调用的代码抛出的所有可能异常,它看起来像

void func() {
    try {
        // lots of stuff that may throw
    } catch(...) {
        // handle exceptions, NOTHING here throws.
    }
}

我的问题是:此功能是否符合noexcept的条件?是否应该这样声明?我有这个疑问,因为它内部可能存在异常传播,但调用者代码永远不会收到。

1 个答案:

答案 0 :(得分:2)

来自C ++ 11标准的Exception specifications, Section 15.4/2

  

具有非抛出异常规范的函数不允许任何异常。

如果catch块中的代码保证不抛出任何异常,则该函数可以具有非抛出异常规范。即你可以使用:

void func() throw () { ... }

void func() noexcept { ... }

void func() noexcept(true) { ... }