以编程方式确定是否启用了例外

Nem*_*vic 16 c++ metaprogramming exception

大多数C++编译器允许禁用异常.有没有办法从代码中确定它而不使用特定于编译器的预处理器宏,例如MSVC的_CPPUNWIND?理想情况下在编译时.

Pup*_*ppy 6

不.例外是C++的一部分.某些编译器允许您禁用它们的事实是无关紧要的,标准将不会让您检测它们是否已启用 - 就其而言,它们始终处于启用状态.如果您想了解特定于实现的行为,唯一的方法是询问实现.

  • @Andre:你可以自由地改写它,但我相信我会问一个具体而实际的问题. (7认同)

Mar*_*ata 6

2014WG21以来,推荐使用宏

__cpp_exceptions
Run Code Online (Sandbox Code Playgroud)

如果支持异常并且编译器符合C++ 98,它将具有值199711.此处显示了其他类似的功能宏.

  • 我观察到的一个挑战是,MSVC 不使用这些宏,如果您禁用异常/rtti,这些宏是未定义的,因此很难区分两者(即编译器是否支持 __cpp_exceptions & 异常被禁用,或者编译器不支持__cpp_exceptions & 我们应该使用编译器特定的逻辑)。 (2认同)