gpt4 book ai didi

c++ - std::uncaught_exception 如何工作?

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:26 26 4
gpt4 key购买 nike

介绍

postsarticles关于 std::uncaught_exception 的用法和原理。

Functionality这个函数提供的归结为

std::uncaught_exception detects if stack unwinding is currently in progress.

在搜索它的定义时,我看到的只是对 DLL 的调用

_CRTIMP2_PURE bool __CLRCALL_PURE_OR_CDECL uncaught_exception();

如何在程序中实现这种级别的自省(introspection)?这是仅通过 c++ 或编译器/汇编魔法就可以实现的东西吗?

最佳答案

它是编译器的魔法,尽管它不需要用汇编编写。编译器只需要能够访问作为语言运行时环境一部分的某些全局状态。该状态可能对您的程序不可用,但编译器知道如何访问它。

有一个 C++ ABI最初是为 Itanium 平台编写的,但也被几家供应商用于其他目标,作为事实上的标准 ABI。 ABI 定义了几个函数和类型,它们不是标准 C++ 的一部分,但由任何符合 Itanium ABI 的 C++ 运行时环境提供,编译器生成对这些函数的调用以实现异常处理、动态内存(取消)分配、RTTI 等

exception handling部分指定必须有一个类型为 __cxa_eh_globals 的全局结构对于每个线程,实现 uncaught_exception() 所需要做的就是查看当前线程结构的 uncaughtExceptions 成员是否非零。

显然,上述细节适用于符合该 ABI 的编译器,但对于具有不同 ABI 的其他编译器,会有类似的东西,可能没有公开发布或记录,但可由编译器本身使用。

关于c++ - std::uncaught_exception 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25094250/

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