struct Nobody_Expects_The_Spanish_Inquisition{};
int main(){
throw Nobody_Expects_The_Spanish_Inquisition();
}
在Ideone上显示的输出:
抛出一个Nobody_Expects_The_Spanish_Inquisition实例后终止。
Windows系统的类似输出:
在Test.exe的0x760fb727处未处理的异常: Microsoft C++ 异常: Nobody_Expects_The_Spanish_Inquisition,内存位置为0x001ffea3.
可以看出,最终汇编似乎已经包含了异常名称,或者存在另一种获取名称的方法。
这是否可以视为某种反射?或者,如果异常名称实际上可以显示,那么它是编译器/操作系统相关的吗?
typeid
/ RTTI。 - Nemostd::exception
,然后作为最后的手段捕获所有异常。如果你恰好捕获到一个std::exception
,那么你可以利用std::exception::what
成员函数来记录更有意义的错误信息。 - Emile Cormier