是否可以使用noreturn noexcept函数而不是调用std :: terminate?

Gui*_*cot 2 c++ noexcept c++14

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

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

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

是否有理由fatal_error2不建议使用?该函数的目标是终止程序,我甚至将其标记为noreturn,但每个人似乎都告诉我不要抛出noexcept函数.

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

Max*_*kin 7

是否有理由不建议使用fatal_error2?

如果你想打电话std::terminate- 就这样做.这是最佳实践,因为它遵循最少惊喜的原则.

fatal_error2声明为,noexcept但它抛出异常,这使得代码的读者怀疑作者的意图.


我很想使用fatal_error2它,因为它what()在终端输出...

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

  1. 此功能不可移植,C++标准不要求.
  2. 你可以用std::cerr << msg << std::endl或者自己这样做fprintf(stderr, ...).而且,这再次使您的意图清楚地告诉读者.