抛出不同种类的异常是有用的吗?

oRU*_*MOo 1 c++ exception

例如std::runtime_error,std::invalid_argument在大型项目中抛出不同的异常是否有用?或者更好的方法是std::exception提供一个好的文本参数what()?什么时候可以从中派生出一些子类std::exception

入魔

jde*_*aan 6

使用throw最具体的异常总是有意义的.因为每个异常应该从std::exception代码中获取,所以可以决定它想要处理它的粒度级别(通过引用捕获!来自S.Meyers的"更有效的C++"中的第13项).

std::exception使用一些文本禁止使用:

  • 不必要地限制捕获代码的使用可能性
  • 如果必须根据异常的类型执行不同的操作(可以用RTTI以较低的成本实现),捕获代码需要将文本解析为基础逻辑.
  • 我想不出任何可能有益的情况.what()如果需要,覆盖可为任何异常提供足够的文本.