std::quick_exit和std::abort之间的差异

std::quick_exit和std::abort之间的差异

std::quick_exit()

这将导致无需完全清理资源而发生正常程序终止。

语法:

void quick_exit(int exit_code) noexcept;

在执行线程的情况下,代码变得复杂并且很难知道线程的执行。 在一个线程可能在等待进程结束,而另一个线程则在等待前一个线程时,实际程序通常会死锁并退出,这是不愉快的。 管理员必须强制启动系统或关闭用户界面等,才能摆脱此锁定。 为此目的制作了 std :: quick_exit() 。 它终止了程序,使我们摆脱了执行真实程序时摆脱死锁的电子邮件。 它清除IO,但不会清空静态析构器。另一个函数 at_quick_exit() 将函数作为参数,该参数在调用 quick_exit() 函数时执行。 注册到此的功能按其执行顺序的反向顺序调用。

#include <cstdlib>
void atEXIT()
{
  cout << "快速退出功能。";
}
int main ()
{
  at_quick_exit(atEXIT);
  cout << "主要功能";
  quick_exit(0);
  cout << "结束主要功能"; 
  return 0;
}

输出:
主要功能
快速退出功能。

std::abort()

除非SIGABRT正在由传递给std :: signal的信号处理程序进行捕获并且处理程序不返回,否则它将导致异常程序终止。 语法:

void abort() noexcept;

POSIX规定abort函数覆盖阻止或忽略SIGABRT信号。

#include <cstdlib>

int main ()
{
  FILE * fp;
  fp= fopen("myfile.txt", "r");
  if (fp== NULL)
  {
    fputs("打开文件时出错\n", stderr);
    abort();
  }
  fclose(fp);
  return 0;
}
**输出:** 如果找不到名为myfile.txt的文件或由于任何原因失败,则输出错误消息并中止程序。

相似之处: std :: quick_exit()和std :: abort()函数在cstdlib标头中定义。 这两个函数都没有参数和异常。 它们都没有返回值。 它们用于终止程序,但它们仍然彼此不同。 差异: 引入 quick_exit() 函数的原因是在清除IO的同时结束运行的程序并仍然获得某些程序的一部分,即 at_quick_exit() 中注册的函数可执行,而 std::abort() 函数终止程序而不执行程序的进一步部分并清除IO。

让我们以表格形式看到差异-:

ID std :: quick_exit std :: abort
1。 在头文件 中定义。 定义在头文件中。
2。 其语法为: quick_exit(int exit_code) 其语法为: abort();
3。 它仅采用一个参数。 它不采用任何参数。
4。 其返回值为void。 其返回值为void。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程