C已经有某种反思吗?

前端之家收集整理的这篇文章主要介绍了C已经有某种反思吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑这个例子:
struct Nobody_Expects_The_Spanish_Inquisition{};

int main(){
    throw Nobody_Expects_The_Spanish_Inquisition();
}

输出显示Ideone

terminate called after throwing an instance of Nobody_Expects_The_Spanish_Inquisition

Windows的类似输出

Unhandled exception at 0x760fb727 in Test.exe: Microsoft C++ exception: Nobody_Expects_The_Spanish_Inquisition at memory location 0x001ffea3..

可以看出,最终的程序集似乎已经包含了异常的名称,或者有另一种获取名称方法.

这可以被视为某种反思吗?或者,如果实际可以显示异常的名称,它是否依赖于编译器/ OS?

解决方法

它依赖于编译器.显然,编译器很容易发现每个throw,并将每个抛出的对象的类型编码到可执行文件中.但是没有要求他们应该这样做.

考虑到这一点,异常必须在抛出时复制到一个奇怪的依赖于实现的空间.因此,通过此机制可以访问特定编译器的运行时,可以访问其类型的名称.

猜你在找的C&C++相关文章