C++:[[maybe_noreturn]]

flo*_*wit 5 c++

据我所知,[[maybe_noreturn]]C++ 中没有属性。

我有一个如下所示的函数:

void func() {
    try {
        do_something();
    } catch (const std::exception& e) {
        std::exit(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我标记func[[noreturn]]我会遇到 UB 的快乐案例。当我没有从未标记为 的函数返回时,这是 UB 吗[[noreturn]]

或者是否有其他语言结构、编译器扩展或库可以实现类似的功能[[maybe_noreturn]]

eer*_*ika 6

当我没有从未标记为 [[noreturn]] 的函数返回时,这是 UB 吗?

不,它被明确定义为从函数终止程序,无论它[[noreturn]]是否具有属性。在适当的情况下使用[[noreturn]]是可选的 - 即当函数无条件终止时 - 但在这种情况下始终建议使用。

不需要这样的属性[[maybe_noreturn]]。如果有必要,那么您会发现必须将任何可能调用 function 的函数[[maybe_noreturn]]也声明为[[maybe_noreturn]],然后声明调用这些函数的函数,一直到调用链的顶部。