gpt4 book ai didi

c++ - 可以抛出一个 noreturn noexcept 函数而不是调用 std::terminate 吗?

转载 作者:太空狗 更新时间:2023-10-29 23:49:06 25 4
gpt4 key购买 nike

我正在制作一个小的错误处理系统,我想做一个终止程序的 fatal error 。我想到了两种方法:

[[noreturn]] inline void fatal_error1(char const* msg) {
std::terminate();
}

[[noreturn]] inline void fatal_error2(char const* msg) noexcept {
throw std::runtime_error{msg};
}

是否有不推荐使用 fatal_error2 的原因?该函数的目标是终止程序,我什至将其标记为 noreturn,但似乎每个人都告诉我不要抛出 noexcept 函数。

我很想使用 fatal_error2,因为它在终端输出 what(),而我需要在该 header 中包含一些输出函数来打印消息在 fatal_error1 中。

最佳答案

Is there a reason why using fatal_error2 would not be recommended?

如果您想调用std::terminate - 就那样做。这是最佳实践,因为它遵循 the principle of least surprise .

fatal_error2声明为 noexcept 但是它抛出了一个异常,让代码的阅读者怀疑作者的意图。


I am tempted to use the fatal_error2 because it output what() in the terminal...

这似乎不是一个好的借口,因为:

  1. 此功能不可移植,也不是 C++ 标准所要求的。
  2. 你可以自己用 std::cerr << msg << std::endl 轻松地做到这一点或 fprintf(stderr, ...) .而且,这再次让代码的读者清楚地了解您的意图。

关于c++ - 可以抛出一个 noreturn noexcept 函数而不是调用 std::terminate 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46668749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com