我应该使用 std::cerr 和 exit() 而不是抛出异常吗?

涡轮卢克

我对 C++ 比较陌生,我只是想知道,抛出异常或编写 std::cerr 和 exit() 之间的主要区别是什么?我知道如果没有捕获异常,程序将退出。std::cerr 是否有任何用例,或者我应该总是抛出异常?或者我不应该在一般情况下使用 std::cerr ?是否有一些最佳实践?

throw std::runtime_error("runtime error msg");

或者

std::cerr << "cerr error msg";
exit(1);                      

两个版本都OK吗?

珊瑚K

两者之间的主要区别在于您可以捕获和处理异常(用 引发throw)。这个动作有两个优点:

答:您可以抛出异常并处理它,而不会导致程序崩溃。

B. 在处理异常时,他们会自动调用你的对象的析构函数。例如:

try {
    A a;
    throw runtime_error("A"); // Throw exception A
} catch (...) { // Catch exception A & Call a's object destructor.
    throw runtime_error("B"); // Throw exception B and crush (if no one else catch it).
}

如果您考虑将来处理此代码(或者如果其他人需要继续处理此代码),您想使用throw和 不exit(1)选项。

有关更多详细信息,请参阅:调用 exit() 时是否运行析构函数?&是否在 C++ 中抛出后调用析构函数?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我应该如何使用c ++处理“ std :: cerr”和“ std :: cin.fail()”?

来自分类Dev

我应该使用名称空间std吗?

来自分类Dev

我应该只使用 std::vector 吗?

来自分类Dev

std :: cout / std :: cerr seg faults

来自分类Dev

我应该使用std :: shared指针传递指针吗?

来自分类Dev

我应该将printf与std :: cin混合使用吗?

来自分类Dev

尝试将 std::cerr 重定向到文件时访问冲突异常

来自分类Dev

在C ++中exit和std :: exit有什么区别?

来自分类Dev

将调试输出重定向到空流,而不是std :: cerr

来自分类Dev

我应该使用operator + =而不是operator +来串联std :: string吗?

来自分类Dev

我应该抛出不同的异常类型吗?

来自分类Dev

我应该抛出不同的异常类型吗?

来自分类Dev

为什么我应该总是使用|| 代替| 和&&而不是&?

来自分类Dev

我们应该在C ++中使用exit吗?

来自分类Dev

发生错误时,我应该使用process.exit(1)吗?

来自分类Dev

我应该同时使用NotNull和ContractAnnotation(“ null => halt”)吗?

来自分类Dev

我应该使用NSDate跟踪到达时间和延迟吗?

来自分类Dev

我应该使用php:// input和/或$ _POST吗?

来自分类Dev

我应该对一组指针使用std :: set还是std :: unordered_set吗?

来自分类Dev

我应该在返回std :: vector的函数上使用std :: move吗?

来自分类Dev

我应该在返回std :: vector的函数上使用std :: move吗?

来自分类Dev

std :: queue我应该缩小以适合吗?

来自分类Dev

c ++中的cerr和cout意外输出

来自分类Dev

std :: cerr不等待std :: cout(运行CTest时)

来自分类Dev

使用std :: map时,我应该重载operator ==作为键类型吗?

来自分类Dev

我应该使用std :: system编写单元测试的脚本部分吗?

来自分类Dev

您可以使用JAX-WS和SOAP抛出链式异常吗?

来自分类Dev

我应该在模型中抛出HttpStatus异常吗?

来自分类Dev

我应该在表示层中抛出异常吗?

Related 相关文章

  1. 1

    我应该如何使用c ++处理“ std :: cerr”和“ std :: cin.fail()”?

  2. 2

    我应该使用名称空间std吗?

  3. 3

    我应该只使用 std::vector 吗?

  4. 4

    std :: cout / std :: cerr seg faults

  5. 5

    我应该使用std :: shared指针传递指针吗?

  6. 6

    我应该将printf与std :: cin混合使用吗?

  7. 7

    尝试将 std::cerr 重定向到文件时访问冲突异常

  8. 8

    在C ++中exit和std :: exit有什么区别?

  9. 9

    将调试输出重定向到空流,而不是std :: cerr

  10. 10

    我应该使用operator + =而不是operator +来串联std :: string吗?

  11. 11

    我应该抛出不同的异常类型吗?

  12. 12

    我应该抛出不同的异常类型吗?

  13. 13

    为什么我应该总是使用|| 代替| 和&&而不是&?

  14. 14

    我们应该在C ++中使用exit吗?

  15. 15

    发生错误时,我应该使用process.exit(1)吗?

  16. 16

    我应该同时使用NotNull和ContractAnnotation(“ null => halt”)吗?

  17. 17

    我应该使用NSDate跟踪到达时间和延迟吗?

  18. 18

    我应该使用php:// input和/或$ _POST吗?

  19. 19

    我应该对一组指针使用std :: set还是std :: unordered_set吗?

  20. 20

    我应该在返回std :: vector的函数上使用std :: move吗?

  21. 21

    我应该在返回std :: vector的函数上使用std :: move吗?

  22. 22

    std :: queue我应该缩小以适合吗?

  23. 23

    c ++中的cerr和cout意外输出

  24. 24

    std :: cerr不等待std :: cout(运行CTest时)

  25. 25

    使用std :: map时,我应该重载operator ==作为键类型吗?

  26. 26

    我应该使用std :: system编写单元测试的脚本部分吗?

  27. 27

    您可以使用JAX-WS和SOAP抛出链式异常吗?

  28. 28

    我应该在模型中抛出HttpStatus异常吗?

  29. 29

    我应该在表示层中抛出异常吗?

热门标签

归档