c++ - 为什么在 C++ 中使用 try 和 catch()?

标签 c++ exception exception-handling try-catch

我明白 trycatch()用于异常处理,以防程序在某些情况下发生错误或崩溃。我也明白他们是如何工作的。但是为什么要用trycatch() ?为什么不直接使用 if()查找特定案例的语句,如果该案例为真,则执行 cout << //error code

最佳答案

异常处理:

  • 可以与没有机会返回单独错误代码的构造函数和运算符一起使用(它们可以将对象设置为某种错误状态——这意味着进一步的内存使用——但客户端代码也必须记住检查该错误稍后说明)
    • 例如:用户定义的类型 - 类 X - 支持符号 x1 = x2 + x3 - 错误代码可以在哪里返回?
  • 可以在初始化列表中构造特定的类/结构数据成员时启动——避免进一步的数据成员构造,否则可能注定失败或浪费;相比之下,显式错误处理只能稍后在构造函数体中进行
  • 更含蓄——强调正常的成功代码流,可以使其更简洁、可读、可维护
  • 分解方式不同——来自许多地方的异常可以在一个地方捕获,这有时会使错误处理代码本身更加简洁、可读、可维护
  • 在错误处理会重复的情况下,简洁的好处实际上可以导致更可靠的错误处理
  • 通常使用自己的内存区域,独立于栈,用于局部变量、函数参数、保存CPU寄存器和返回地址等;这意味着 throw 语句可能能够直接在该内存区域中可靠地构造异常对象,即使剩余堆栈内存小于异常对象(尽管实现细节并且不受标准保证)
  • 具有不同的性能配置文件,因此在某些情况下两者都可以更快
  • 促进更丰富的错误信息从低级代码向上传播到中间代码,您可能不“拥有”或希望/无法更改以传播 C 样式的错误代码,直至处理点

关于c++ - 为什么在 C++ 中使用 try 和 catch()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14866791/

相关文章:

c++ - 从本地 html 文件提交表单

Java 7 - 带有最终异常的精确重新抛出

php - C++/MySQL - 通过主机地址访问数据库时为 'Unknown MySQL server host';没有IP

java - 加入线程时处理异常的最佳方法

c++ - 是否有任何带有执行器的在线编译器可以编译使用特定于 GPU 的 C/C++ 代码的应用程序?

c++ - 在同一程序中使用 Linux C++ 共享库和静态库

c++ - 为什么模板特化不能改变返回类型?

c++ - 异常安全 : Strong Guarantee vs Basic Guarantee

c++ - std::current_exception 是否应该从类的析构函数中的 catch block 返回非空

Ruby 异常——为什么是 "else"?