【发布时间】:2011-10-08 16:34:01
【问题描述】:
我发现 C++ 标准函数在出现异常时表现出非常不同的行为。这似乎与其吹捧的“尝试/投掷/接球”相矛盾。谁能简要解释一下 C++ 设计者做出这些选择的原因是什么?
-
什么都不做,例如,尝试在堆栈为空时 pop()(而不是抛出 range_error),执行 sqrt(-1)(而不是抛出 domain_error)
李> 返回一个零指针:例如在进行非法指针向下转换时(有趣的是,进行非法引用向下转换会抛出一个bad_cast)
抛出异常,但这对少数函数来说似乎是这样,例如 substr()
让用户选择是否抛出异常,例如new()在内存不足时会抛出bad_alloc(),但你也可以选择(nothrow)作为new()的选项。
【问题讨论】:
-
您的问题与“处理异常”有什么关系?你只讲错误条件是否抛出异常!