有没有办法在STL中禁用异常,或者使用EASTL是唯一的选项



我目前正在C++17中开发一个跨平台游戏引擎,遇到了一个异常问题。在阅读了性能关键型应用程序中的错误处理之后,我决定在我的项目中不使用异常,用一个返回错误信息的函数替换抛出函数,该函数的类型类似于std::,是常见错误的返回类型,当遇到错误时会中止我目前正在努力保留在禁用异常的情况下使用标准模板库的能力(因为在控制台上运行引擎时,打开异常可能会导致问题(我读到,通过在禁用异常的情况下编译标准模板库,可以将所有异常转换为中止,但我不确定这是否是一个好的跨平台解决方案(尤其是因为MSVC在尝试无异常编译时似乎非常不合作(一种解决方案是使用EASTL,但据我所知,我更喜欢使用该标准,因为它有更好的文档记录,并且是现代cpp的最新版本


我的问题有解决方案吗,还是我被迫使用EASTL

使用CL.exe

MS STL在禁用C++异常的情况下工作得非常好。如果禁用了c++异常,则MS STL将引发结构化异常。

如果不存在任何类型的_HAS_EXCEPTIONS == 0/EH开关,或者如果使用了/kernel开关,则关键字throw/try/catch不再编译。你在SEH的土地上。SEH是Windows固有的。

EASTL对您来说是一个完美的操作系统无关解决方案,但在Windows上,EASTL不使用SEH。如果_HAS_EXCEPTIONS == 0。它只是尝试EASTL_DEBUG_BREAK((。

在运行时,您可以使用_CPPUNWIND来检查是否启用了异常。如果_CPPUNWIND不存在,关键字try/shop/catch将不再存在。

相关内容

最新更新