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

New*_*bee 8 c++ if-statement exception-handling

我已经在很多地方使用过if else语句,但是我是异常处理的新手.这两者之间的主要区别是什么......

例如:

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

 if (ptr == NULL) {
     // Handle error cases here...
 }
Run Code Online (Sandbox Code Playgroud)

要么

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

所以我们在这里使用标准类的异常,它有一些像e.what这样的构建函数.所以它可能是有利的......除了所有其他功能处理我们可以使用 - 如果否则 - 也.使用异常处理还有其他优点吗?

感谢名单

Arn*_*rtz 3

要收集答案中的评论内容:

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

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

int *ptr = new(std::nothrow) int[1000];
Run Code Online (Sandbox Code Playgroud)

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

有很多文章将一般错误处理与异常与返回代码进行比较,并且在这里试图涵盖该主题会很费力。例外的原因包括

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