有关于使用和理性的帖子和文章std::uncaught_exception.
该功能提供的功能归结为
std :: uncaught_exception检测堆栈展开当前是否正在进行中.
在搜索其定义时,我看到的是对DLL的调用
_CRTIMP2_PURE bool __CLRCALL_PURE_OR_CDECL uncaught_exception();
Run Code Online (Sandbox Code Playgroud)
如何实现程序中的这种内省水平?这是仅仅通过c ++或编译器/汇编魔法实现的东西必须发挥作用吗?
它是编译器的魔力,虽然它不需要在汇编中编写.编译器必须能够访问属于语言运行时环境的某些全局状态.该状态可能对您的程序不可用,但编译器知道如何访问它.
有一个C++ ABI最初是为Itanium平台编写的,但也被其他目标上的几个供应商用作事实上的标准ABI.ABI定义了几个不属于标准C++的函数和类型,但是由符合Itanium ABI的任何C++运行时环境提供,并且编译器生成对这些函数的调用,以实现异常处理,动态等功能.内存(de)分配,RTTI等
在异常处理部分指定必须有类型的全局结构__cxa_eh_globals为每个线程,并执行所有的需要uncaught_exception()就是看是否uncaughtExceptions当前线程的结构的成员是非零.
显然,上面的细节适用于符合ABI的编译器,但对于具有不同ABI的其他编译器,会有类似的东西,可能没有公开发布或记录,但编译器本身可以使用.
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |