有没有一种方法可以禁用STL中的异常,还是仅使用EASTL?

时间:2018-12-08 18:12:04

标签: c++ exception-handling stl game-engine c++17

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


我的问题是否可以解决?还是我不得不使用EASTL?

1 个答案:

答案 0 :(得分:0)

使用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()