gpt4 book ai didi

c++ - g++ -fno-enforce-eh-specs - 为什么/如何违反 C++ 标准?

转载 作者:太空宇宙 更新时间:2023-11-04 15:33:41 25 4
gpt4 key购买 nike

来自 man gcc:

  -fno-enforce-eh-specs
Don't generate code to check for violation of exception specifications
at run time. This option violates the C++ standard, but may be useful
for reducing code size in production builds.

当编译器进行优化时,它会删除各种检查,它会打破函数之间的界限,它甚至可能会在某些情况下避免开发人员在代码中放入系统调用之类的事情。所以:

  • 为什么异常规范违规检查如此特殊以至于无法跳过?
  • 具体检查了什么?
  • 如果使用此开关对于减少代码大小非常有用,那么 C++ 标准为什么需要这些检查?我认为这个想法是尽可能实现零开销抽象。

最佳答案

(现在是旧的?)标准要求声明为 void f() throw(x); 的函数不得抛出除 x(或可能派生的)以外的任何异常来自 x?)。如果它试图抛出其他东西,则应该调用 std::unexpected(),并且可能以调用 std::terminate() 结束程序以终止程序.

但如果在编译时无法确定异常的确切类型,则可能需要进行运行时检查以确定异常的类型是否可接受。

当然,如果此选项删除了该检查,则不正确的异常可能从函数中逃逸。这将违反标准。

关于c++ - g++ -fno-enforce-eh-specs - 为什么/如何违反 C++ 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41324863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com