这可能是一个愚蠢的问题,但在C++中,当我想抛出异常时......我该扔什么?
我应该抛出std :: exception,还是标准库保留的?或者我应该抛出一个字符串或int?或者我应该抛出我觉得合适的东西?
通常人们不会直接抛出std :: exception,原因很简单,因为它不存储任何错误消息.什么方法不会返回任何东西.我有时会对此感到困惑,因为MSVC为std :: exception中的一个接受字符串的参数化构造函数提供了非标准扩展.
您可以在现有的异常类中进行选择,例如std :: runtime_exception或定义您自己的异常类.这有些主观,但我建议将异常类的数量保持在最低限度,因为RAII可以消除很多需要拥有多个代码分支并捕获不同异常类型的块.通常,消息与符合RAII的代码相结合,足以从任何异常中优雅地恢复.
最后,为了类似的原因,我建议您从std :: exception继承的所有异常.如果可以避免,则不希望不同的异常类型使用许多不同的catch块来丢弃代码.尽可能地解决问题.
归档时间: |
|
查看次数: |
1807 次 |
最近记录: |