【发布时间】:2014-04-20 18:53:57
【问题描述】:
我编写了一些不抛出异常的类,但它们使用 STL,而 STL 可以抛出异常。例如,在我的课堂上有使用 std::vector、std::list、std::string 的函数。 STL 可能会在复制字符串或创建向量时抛出,对吗?所以我不能将我的课程描述为无异常,对吗?
在这种情况下,你们会怎么做?您是否将每个函数都包装在 try/catch 中?你如何描述你的班级?谢谢
【问题讨论】:
-
@cmaster 你的推理有好处,但你的结论是荒谬的。您如何解释现代语言已删除 goto 但仍有例外这一事实?
-
@djechlin 这对我来说仍然是个谜。我只能得出结论,人们只是没有意识到。多年来,我本人从未质疑例外概念的有效性。你说,我的结论很荒谬,因为大多数程序员都认为异常很棒。但是大多数人都完全错了,它可能会再次发生。一方面,我会坚持让我相信的原因:例外情况比
goto更糟糕。所以,要么goto是无害的,要么例外是有害的。你会选择哪一个? -
许多语言都遵循各种“就是这样”的设计方法,没有任何批判性思维或深入检查此类决策的利弊。其他语言也不是 C++,对 Ruby、JavaScript 或 C# 有意义的可能 对 C++ 没有神奇的自动意义。我会想象课后特价会告诉人们“其他人都这样做,所以它一定很好”是一种糟糕的思考方式,但显然不是。 :)
-
@cmaster:异常不适用于跳过代码。当出现不常见的错误时,它们的目的是做一些比
std::abort()的默认行为更有用的事情。这个有用的东西通常需要与代码在常见情况下要做的事情有很大不同,当然。 -
@djechlin:“异常与错误返回”是错误的双头垄断。您编写的任何异常安全代码要么是微不足道的,要么很可能实际上不是异常安全的。更不用说许多非常有用的算法和容器实际上不可能使异常安全。 C++ 社区中有很大一部分会禁用异常、避免使用 STL、禁止新建和删除以及使用无异常的中间件。很多聪明人肯定不同意你的观点,所以根据你自己的推理...... :)