gpt4 book ai didi

c++ - throw() (即 __declspec(nothrow)) 是否在 Visual C++ 中提供了真正的好处?

转载 作者:IT老高 更新时间:2023-10-28 23:01:56 26 4
gpt4 key购买 nike

专注于 Visual C++,您是否体验过使用 throw()(即 __declspec(nothrow))非抛出规范在 C++ 代码中的显着性能提升?它真的对优化器有帮助吗?是否有任何基准显示性能提升?

我在网上找到了不同的(相反的)建议:

Boost exception-specification rationale 反对 throw(),而Larry Osterman 在他的博文中似乎赞成:Why add a throw() to your methods?

(我想澄清一下,我对 VC++ 特定的代码感兴趣;我知道在 GCC 中,throw() 规范实际上可以是一种“悲观化” "由于运行时检查。)

P.S.阅读ATL headers,发现throw()被普遍使用;此外,我在 this MSDN article 中找到了一个方便的 C++ RAII unique_handle 类。也使用 throw() 规范。

最佳答案

MSVC 编译器将其视为优化提示,是的。

Boost 必须是跨平台的,它们必须在各种编译器上寻找安全且高效的东西。正如 boost 文档所说,some 编译器可能会在指定 throw() 时生成较慢的代码,并且在许多情况下,编译器可以推断出没有抛出异常 无论是否存在 throw() 规范,因此对于 Boost,最安全的方法是永远不要使用 throw-specifications。

但是,如果您专门针对 MSVC,则 throw() 会有效地告诉编译器不要为函数生成异常处理代码,这可能会在函数过于复杂的情况下加快速度复杂的编译器确定不会抛出异常。

关于c++ - throw() (即 __declspec(nothrow)) 是否在 Visual C++ 中提供了真正的好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10559521/

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