捕获其中所有异常的C++函数是否"noexcept"?

Is a C++ function that catches all exceptions inside it "noexcept"?

本文关键字:函数 C++ 是否 noexcept 异常      更新时间:2023-10-16

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

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

我的问题是:这个函数符合noexcept条件吗?它应该这样宣布吗?我有这个疑问,因为其中可能存在异常传播,但调用方代码永远不会收到。

来自异常规范,C++11 标准的第 15.4/2 节:

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

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

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

void func() noexcept { ... }

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