c++ - 使用 try-Catch 异常处理程序和 if else 条件检查之间的区别?

标签 c++ if-statement exception

<分区>

我在很多地方都使用过 if...else 语句,但是我对异常处理还是陌生的。这两者的主要区别是什么?

例如:

 int *ptr = new (nothrow) int[1000];
 
 if (ptr == NULL) {
     // Handle error cases here...
 }

  try
  {
    int* myarray= new int[1000];
  }
  catch (exception& e)
  {
    cout << "Standard exception: " << e.what() << endl; 
  }

所以我们在这里使用标准异常类,它有一些构建函数,如 e.what()。所以这可能是优势。除此之外,我们还可以使用 if...else 处理所有其他功能。使用异常处理还有其他优点吗?

最佳答案

收集评论在回答中所说的内容:

自1998年标准化以来,new失败时不返回空指针而是抛出异常,即std::bad_alloc。这与 C 的 malloc 不同,可能与 C++ 的一些早期准标准实现不同,其中 new 可能 也返回了 NULL(我不不知道,说实话)。

在 C++ 中有可能在分配失败时获取空指针而不是异常:

int *ptr = new(std::nothrow) int[1000];

简而言之,您拥有的第一段代码不会按预期工作,因为它是在存在 C++ 异常的情况下尝试进行 C 风格的错误处理。如果分配失败,将抛出异常,永远不会进入 if block ,并且程序可能会终止,因为您没有捕获 bad_alloc

有很多文章将一般错误处理与异常与返回码进行比较,如果想在这里涵盖这个主题,那就太过分了。异常(exception)的原因包括

  • 函数返回类型不被错误处理占用,但可以返回实际值——不需要“输出”函数参数。
  • 您不需要处理每个函数中每个函数调用的返回,而是可以在调用堆栈的某些级别捕获异常,您实际上可以处理错误
  • 与一个全局 errno 变量和一个返回的错误代码相比,异常可以将任意信息传递到错误处理站点。

关于c++ - 使用 try-Catch 异常处理程序和 if else 条件检查之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18307737/

相关文章:

java - 无法在 switch 语句中接收用户输入

c++ - c++中的异常机制问题

android - 无法写入内部存储器android

c++ - 谷歌测试宏

c++ - 友元函数调用派生类的静态成员。没有得到预期的输出

c++ - C++上下文中的抽象和接口(interface)有什么区别?

c++ - MATLAB 中具有稀疏功能的任何 C++/C 等效函数

shell - 验证复制成功

java - 可以设置 if 语句来搜索文本文件中的特定模式吗?

java - 递归在应该为真时返回假