9

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

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

我不确定是否清楚地看到这些术语之间的差异。有人可以提供一个清晰简洁的解释吗?

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

4

2 回答 2

4

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

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

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

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

  • 陷阱是当程序检测到错误情况并相应地采取一些措施时。

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

于 2013-08-12T10:52:31.470 回答
0

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

于 2013-08-12T10:21:47.557 回答