#include <stdio.h> #include <stdlib.h> #include <typeinfo> using namespace std; class A{ public: int x; virtual void fa(){} }; class B{ public: int y; //virtual void foo(){} }; class D:public B{ public: int z; }; int main(int argc, char *argv[]){ B* pb=new B(); B& rb=*pb; try{ //D& rd =dynamic_cast<D&>(rb);//本语句会抛出std::bad_cast A* pa=(A*)pb; D* pd=dynamic_cast<D*>(pa); }catch(std::bad_cast){ printf("std::bad_cast\n"); }catch(...){ printf("get other exception\n"); } //system("PAUSE"); return 0; } |
原帖由 jeanlove 于 2009-1-31 22:43 发表
谢谢,但是有点不明白的地方,就是我之前
D& rd =dynamic_cast(rb);
这句话是可以成功抛出异常的,这是不是说明异常处理的功能已经启用了呢????
原帖由 wwwsq 于 2009-2-1 14:32 发表
GCC编译选项
/GX[-] 启用 C++ 异常处理(与 /EHsc 相同) enable C++ EH (same as /EHsc)
/EHs 启用同步 C++ 异常处理 enable synchronous C++ EH
/EHa 启用异步 C++ 异常处理 enable asynchronous C++ E ...
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |