c – 我可以/我应该使用std :: exception来进行常规错误处理吗?

我将在C中开始这个新项目,并且正在思考一种不痛苦的错误处理方法.现在,我不会开始抛出和捕获异常,并且很可能永远不会抛出异常,但我在想 – 即使是常规错误处理,为什么要自己滚动/复制粘贴一个类来描述错误/状态,当我可以使用std :: exception及其子类(或者可能是std :: optional< std :: exception>)?
using Status = std::optional<std::exception>;
Status somethingThatMayFail(int x);

有人/任何项目是这样工作的吗?这是一个荒谬的想法还是只是有点吱吱作响?

解决方法

我不认为你应该构建异常,除非你真的打算扔它们.我会推荐一个bool或enum返回类型.阅读代码的人的意图会更清晰,而且速度会更快.但是,如果您构造一个异常,那么其他人会认为他们可以抛出异常并导致整个系统崩溃.

C异常在资源管理,触发析构函数和所有这些(RAII)中起着重要作用.以任何其他方式使用它们都会损害性能,并且(更重要的是)会让那些试图维护代码的人感到困惑.

但是,您可以使用与std :: exception无关的状态报告类来执行您想要的操作.当人们不需要时,人们会为“更快”的代码做太多的事情.如果状态枚举不够好,并且您需要返回更多信息,那么状态报告类将起作用.如果它使代码更容易阅读,那就去吧.

除非你实际抛出它,否则不要将它称为异常.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...