据我所知,[[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]]?
当我没有从未标记为 [[noreturn]] 的函数返回时,这是 UB 吗?
不,它被明确定义为从函数终止程序,无论它[[noreturn]]是否具有属性。在适当的情况下使用[[noreturn]]是可选的 - 即当函数无条件终止时 - 但在这种情况下始终建议使用。
不需要这样的属性[[maybe_noreturn]]。如果有必要,那么您会发现必须将任何可能调用 function 的函数[[maybe_noreturn]]也声明为[[maybe_noreturn]],然后声明调用这些函数的函数,一直到调用链的顶部。
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |