我将在C中开始这个新项目,并且正在思考一种不痛苦的错误处理方法.现在,我不会开始抛出和捕获异常,并且很可能永远不会抛出异常,但我在想 – 即使是常规错误处理,为什么要自己滚动/复制粘贴一个类来描述错误/状态,当我可以使用std :: exception及其子类(或者可能是std :: optional< std :: exception>)?
using Status = std::optional<std::exception>; Status somethingThatMayFail(int x);
有人/任何项目是这样工作的吗?这是一个荒谬的想法还是只是有点吱吱作响?
解决方法
我不认为你应该构建异常,除非你真的打算扔它们.我会推荐一个bool或enum返回类型.阅读代码的人的意图会更清晰,而且速度会更快.但是,如果您构造一个异常,那么其他人会认为他们可以抛出异常并导致整个系统崩溃.
C异常在资源管理,触发析构函数和所有这些(RAII)中起着重要作用.以任何其他方式使用它们都会损害性能,并且(更重要的是)会让那些试图维护代码的人感到困惑.
但是,您可以使用与std :: exception无关的状态报告类来执行您想要的操作.当人们不需要时,人们会为“更快”的代码做太多的事情.如果状态枚举不够好,并且您需要返回更多信息,那么状态报告类将起作用.如果它使代码更容易阅读,那就去吧.
除非你实际抛出它,否则不要将它称为异常.