C++ 异常 exception throw
2014-02-24 21:45
120 查看
之前很少用到C++的exception机制,看到C++ Primer的第6章,简要的介绍一下:
首先,C++ 的异常处理包括: throw表达式。如:
一段很简单的代码,不停地读取标准输入,如遇到了 0 ,那么直接抛出异常,然后推出程序。
注意:runtime_error是C++标准异常类,其类定义为:
上述的“input 0”串是构造函数的参数。
try...catch...
简单的例子来解释:
在main函数中调用函数print,print中捕获的到了异常之后,找到其异常处理的过程是,首先在print中找是否有处理该类型的异常的catch语句,如果有,执行之;执行完之后,查看main函数是否有对应的异常处理,如果有,执行。。。如果一路找下来都没有的话,那么直接调用terminate类终止程序的运行即可。
上述程序的执行结果为:
首先,C++ 的异常处理包括: throw表达式。如:
#include<iostream> #include<stdexcept> using namespace std; int main() { int x; while(cin >> x) { if (x == 0) { throw runtime_error("input is 0..."); return 1; } } return 0; }
一段很简单的代码,不停地读取标准输入,如遇到了 0 ,那么直接抛出异常,然后推出程序。
注意:runtime_error是C++标准异常类,其类定义为:
class runtime_error : public exception { public: explicit runtime_error (const string& what_arg); };
上述的“input 0”串是构造函数的参数。
try...catch...
简单的例子来解释:
#include<iostream> #include<stdexcept> using namespace std; void print(int x) { try { if(x == 0) { throw runtime_error("exception in print function..."); } } catch(runtime_error err){ cout << "catch in print function..." << err.what() << endl; } } int main() { int x; while(cin >> x) { try { if (x == 0) { print(x); throw runtime_error("input is 0..."); //return 1; } }catch(runtime_error err){ cout << "catch in main..." << err.what() << endl; return 1; } } return 0; }
在main函数中调用函数print,print中捕获的到了异常之后,找到其异常处理的过程是,首先在print中找是否有处理该类型的异常的catch语句,如果有,执行之;执行完之后,查看main函数是否有对应的异常处理,如果有,执行。。。如果一路找下来都没有的话,那么直接调用terminate类终止程序的运行即可。
上述程序的执行结果为:
相关文章推荐
- C++为什么抓不到除0错“异常”?
- More effective c++ 11(禁止异常(exceptions)流出destructors之外)
- c++ 使用throw抛出异常
- 如何用Windbg找到被catch住的C++的异常
- C++ 学习笔记(5)语句、异常
- C++‘异常’处理机制
- Effective C++ Item 08-别让异常逃离析构函数
- C++的异常处理
- 【C/C++】C++异常基础知识点
- C++ 抛出并捕获多个异常
- 结构化异常处理和C++的异常处理区别
- c++异常抛出和接收机制
- C++异常安全、copy and swap
- c++ 11 国标标准方面的异常处理与微软在Visual Studio 2012的异常处理的区别
- C++‘异常’处理机制
- C++异常的理解
- vs2005 c++ heap使用push_head()异常invalid heap(bug)
- C++异常机制的实现方式和开销分析
- C++中的异常
- C++箴言:争取异常安全的代码