据我所知,在[[maybe_noreturn]]中没有C++属性。
我有一个像这样的函数:
void func() {
try {
do_something();
} catch (const std::exception& e) {
std::exit(1);
}
}如果我将func标记为[[noreturn]],我就会遇到UB,因为这是一个令人高兴的情况。当我不从未标记为[[noreturn]]的函数返回时,是UB吗?
或者是否有其他语言结构、编译器扩展或库实现类似于[[maybe_noreturn]]的东西?
发布于 2022-02-07 15:50:09
当我没有从一个没有标记为[ not ]的函数返回时,
是UB吗?
不,不管程序是否有[[noreturn]]属性,从函数中终止程序都是很好的定义。在合适的情况下,使用[[noreturn]]是可选的--即当函数无条件终止时--但是在这种情况下总是推荐使用它。
不需要像[[maybe_noreturn]]这样的属性。如果有必要,您将发现必须声明任何可能调用[[maybe_noreturn]]函数的函数为[[maybe_noreturn]],然后是调用这些函数的函数,直到调用链的顶部。
https://stackoverflow.com/questions/71021339
复制相似问题