陷阱,错误,失败和程序堕胎有什么区别?

Lau*_*ent 9 c++ terminology

我经常在C++面试问题中看到以下术语:

  • 程序中止
  • 错误
  • 失败
  • 陷阱

我不确定这些术语之间的区别是什么.有人可以提供清晰简洁的解释吗?

编辑:上下文问题是:" 当你删除指针两次时会发生什么? "但是知道这些术语之间的差异对我来说比对答案更重要.

Pot*_*ter 5

这些并不是 C++ 特有的。

  • 中止是指由于出现问题而终止程序或特定操作。有一个std::abort从 C 库继承的 C++ 库函数,它像通过外部信号一样终止程序,并且不运行析构函数或清理。

  • 错误是指出现问题。在 C++ 中,许多类型的错误不一定能立即检测到。相反,C++ 指定了未定义的行为,这可能会涉及安静的内存损坏,从而可能在以后导致神秘的不当行为。

  • 失败是指程序做了错误的事情。这是非常通用的工程术语。尖头发的老板可能比其他人更熟悉这个概念,因为这是顾客唯一真正知道的概念。

  • 陷阱是指程序检测到错误情况并相应采取某些操作。

因此,如果您检测到网络出现故障,并在退出之前向用户显示一条消息,例如“无法继续;您的文档已自动保存”,那么您已捕获错误并中止,但仍然存在失败。

  • 陷阱更常由硬件(MMU 等)检测到。 (3认同)

Pau*_*ans 0

所有这些术语都有点模糊,尤其是错误和失败。它们基本上意味着相同的一般事物:出了问题。程序中止可能是指调用 C 库标准中止函数,该函数会引发 SIGABRT 信号。这通常会导致程序异常终止,但取决于平台以及信号是否被捕获。Trap 通常指信号捕获,由 C 库标准信号函数控制。