在c++库中提供错误码选项以提高性能
Having error codes option in C++ library for performance
我写了一个c++文件库,它有异常和错误代码。可以在程序运行时禁用异常。在这种情况下,用户必须检查错误代码。当然,当启用异常抛出时,不会返回错误代码,因为异常是在被调用函数返回之前抛出的。目前,在禁用时仍然可能抛出异常(bug)。我很快就会修好。有人对我说,同时拥有异常和错误代码被认为是糟糕的设计。我同意他的观点,我即将删除错误代码,并让库抛出带有更多错误信息的自定义派生异常。但我犹豫了。出于性能原因,我喜欢使用这种混合方法。这就是我想做的:保留异常抛出和错误代码,但异常抛出是通过宏在编译时而不是运行时禁用的。
如果用户在公共配置文件中定义以下内容
#define ELMAX_EXCEPTION 1
后面的代码
int Write(std::wstring str) ELMAX_THROW_OR_NOT;
将展开为2中的任意一个
// under C++11 compiler
int Write(std::wstring str) noexcept;
// under C++98 compiler
int Write(std::wstring str) throw();
如果ELMAX_EXCEPTION
没有定义或为零,宏将展开为零。
int Write(std::wstring) ;
我想这样做的原因是,对于那些希望不让编译器生成堆栈展开代码(对于例外)而获得性能提升的库用户来说,编译器可以更好地优化这些函数。我的c++文件库使用C文件API,唯一可能抛出异常的是新关键字,我打算添加nothrow
。UTF-8代码也会抛出异常(也需要修改)
char *parr = new (nothrow) char[num];
if(parr==NULL)
// handle it either through error code or throw exception (if enabled)
请告知我是否应该使用纯异常方法或混合方法(如上所述)来处理我的库错误。谢谢你。
这取决于你想用这个库做什么。显然,从设计的角度来看,例外情况更好,但某些类型的应用(如沉浸式3D游戏)经常禁用它们。
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- Win32编译器选项和内存分配
- C/C++预处理器是否可以检测一些编译器选项
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 通过选项卡的文本设置QTabWidget顺序
- 通过ccmake在cmake中缓存依赖选项
- 如何传递多个 std::文件系统选项?
- 基于编译器选项的编译二进制路径
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- 如何应用 libcurl 的持久连接选项
- 文件中.dat Dlib 选项
- LLVM | codegen 用于带有命令行选项的程序输入功能
- 编译 Boost 时在 OS X 上的"ld:未知选项:-soname"
- 按钮悬停在 QT 中垂直布局的选项卡小部件中不起作用
- Visual Studio C++ 它只构建选项卡中显示的文件吗?
- 在C++不适用于猜数字游戏的情况下再次播放选项
- Qt5 用户界面编译器:-i 选项不可用
- CMake - 更改共享库链接选项
- 在c++库中提供错误码选项以提高性能