陷阱、错误、失败和程序流产之间有什么区别
What is the difference between a trap, an error, a failure and program abortion?
我经常在C++面试问题中看到以下术语:
- 程序中止
- 错误
- 故障
- 存水弯
我不太清楚这些术语之间的区别。有人能提供一个清晰简洁的解释吗?
编辑:上下文问题是:"删除指针两次会发生什么?"但对我来说,了解这些术语之间的差异比答案更重要。
这些对C++来说并不是特别的。
-
中止是指由于出现问题而终止程序或特定操作。有一个从C库继承的C++库函数
std::abort
,它像通过外部信号一样杀死程序,并且不运行析构函数或清理。 -
错误是指出了问题。在C++中,许多类型的错误不一定会立即被检测到。C++反而指定了未定义的行为,这可能涉及安静内存损坏,稍后可能会导致神秘的不当行为。
-
失败是指程序做了错误的事情。这是一个相当通用的工程术语。头发尖尖的老板可能比其他人更熟悉这个概念,因为这是客户唯一真正知道的概念。
-
陷阱是指程序检测到错误情况并采取相应的措施。
因此,如果您检测到网络故障,并在退出前向用户显示一条消息,如"无法继续;您的文档已自动保存",则您捕获了一个错误并中止,但仍然存在故障。
所有这些术语都有点模糊,尤其是错误和失败。它们的意思基本上是一样的:出了问题。程序中止可能是指调用C库标准中止函数,该函数会引发SIGABRT信号。这通常会导致不合理的程序终止,但取决于平台和信号是否被捕获。Trap通常指由C库标准信号函数控制的信号捕获。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 这 4 个 lambda 表达式之间有什么区别?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- (double) 和 double() 之间的区别
- & 和 * 之间的区别
- std::is_convertible 和 std::convertible_to 之间的区别(在实践中)?
- 析构函数和'delete'之间的区别
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- OpenMP #pragma omp for v/s #pragma omp parallel for 之间的区别?
- S() 与 S{} 之间的区别?