C++错误处理,小弟我该catch何种类型
C++异常处理,我该catch何种类型?C/C++ codetry{//int a2, b0//a a / bchar *p hello*p H}
C++异常处理,我该catch何种类型?
C/C++ code try { //int a=2, b=0; //a = a / b; char *p = "hello"; *p = 'H'; } catch ([color=#FF0000]what_type1[/color] & e) { cout << "what_type1 occurred" << endl; } catch ([color=#FF0000]what_type2[/color] & e) { cout << "what_type2 occurred" << endl; } catch(...) { cout << "error occurred" << endl; }
对于C++标准异常处理,最常用的就是try-throw-catch格式,在try块中,有些情况我们可以准确判断异常产生,并抛出异常,比如使用new申请内存,或者除0操作,我们可以throw指定类型的异常,这些异常会在相应类型的catch中被捕获,但是还有一些异常,无法预测它会抛出何种类型的异常,比如数组越界、修改常量字符串的值,本例中try块中有以下语句char *p = "hello";*p = 'H'; 只有当程序执行到 "*p = 'H';"这句时,程序才会抛出异常,而调用者可能自己并不能觉察这种错误,因此也不会也无法用throw抛出异常,那如何捕获该异常究竟是何种类型的异常呢?在本例中,"*p = 'H';"异常,我试了很多中异常类型(包括 exception)都没有捕获到,只有catch(...)才能捕获到,但是用catch(...)捕获到的异常无法知道异常源(假如try中多出可引发异常)和异常类型!
[解决办法]标准c++异常处理是你必须要抛出一个类型,然后catch处理部分才知道要处理的类型。你不抛出那么就谈不上catch
[解决办法][解决办法][解决办法]SEH异常和C++异常有本质的区别, SEH是操作系统提供的异常处理技术, 在任何支持该操作系统的编程语言中, 都可以使用, 而C++异常处理只能在编写C++代码时使用。然而, 应当知道WINDOWS的VC++编译器是使用操作系统结构化异常来实现C++异常的. 也就是说, C++的try块在VC++下编译时, 会变成__try块, C++的catch块会变成SEH的 __except块: catch测试则变成SEH异常过滤器, catch中的代码则变为__except中的代码. 事实上, C++的throw块, 在编译的时候也会变成SEH的RaiseException函数调用, 由c++异常变为SEH异常.
[解决办法]其实我好想说,在C++里面不用异常处理。因为它没有提供一个异常体系。如果你想用的话,最好是自己根据标准提供的设计一套合理的异常体系,再使用
[解决办法]