try、catch 和 throw 语句 (了解)
- C++ 异常使用 try、catch 和 throw 关键字。
- 引发表达式指示错误或异常情况。 可以将任何类型的对象用作引发表达式的操作数。 此对象通常用于传达有关错误的信息。 通常,应使用在标准库中定义的 std::exception 类或某个派生类,或者,如果这些都不适用,则从 std::exception 派生自己的异常类。
- try 块封装一个或多个可能引发异常的语句。
- 一个或多个 catch 块紧跟在 try 块之后。 每个 catch 块指定它能处理异常的类型。
- 以下语法显示一个示例 try 块及其处理程序。 假设 GetNetworkResource() 通过网络连接获取数据,并且两个异常类型是从 std::exception 中派生的用户定义的类,请注意,异常将通过 catch 语句中的引用传递:
- MyData md;
- try {
- // code that could throw an exception
- md = GetNetworkResource();
- }
- catch (networkIOException& e) {
- // code that executes when an exception of type
- // networkIOException is thrown in the try block
- //…
- // Log error message in the exception object.
- cerr << e.what();
- }
- catch (myDataFormatException& e) {
- // code that handles another exception type
- //…
- cerr << e.what();
- }
- // The following syntax shows a throw expression:
- MyData GetNetworkResource()
- {
- //...
- if(IOSuccess == false)
- throw networkIOException("Unable to connect");
- //...
- if(readError)
- throw myDataFormatException("Format error");
- // ...
- }
- try 子句后的代码是代码的受保护部分。 引发表达式将引发(引起)异常。 catch 子句后的代码块是异常处理程序,并捕获(处理)由引发表达式引发的异常(如果引发和捕获表达式的类型兼容)。 有关管理 catch 块中的类型匹配的规则的列表,请参阅 _____。 如果 catch 语句指定省略号 (...) 而不是类型,则 catch 块将处理任何类型的异常,包括 C 异常和系统或应用程序生成的异常,如内存保护、被零除和浮点冲突。 由于将尝试按程序顺序捕获块,因此该处理程序必须是其 try 块中的最后一个处理程序。 请小心使用 catch (…);通常是用来记录错误或在停止执行程序前执行任何特别清理的 catch 块。 不允许程序继续运行,除非 catch 块知道如何处理所捕获的特定异常。
- 没有操作数的引发表达式将重新引发当前正在处理的异常。 此类表达式只应出现在 catch 处理程序中或从 catch 处理程序内部调用的函数中。 重新引发异常对象是原始异常对象(而不是副本)。 例如:
- try {
- throw CSomeOtherException();
- }
- catch(...) { // Catch all exceptions – dangerous!!!
- // Respond (perhaps only partially) to exception
- throw; // Pass exception to some other handler
- }
我感觉确实c++这个用的比较少,像.net和java到处都是这个东西,如c#中的toint都有可能产生异常,c++中感觉操作数据库时用的比较多
try、catch 和 throw 语句 (了解)的更多相关文章
- try{}、catch(){}、throw语句
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- VC6下 try catch 在release下的杯具(默认情况下,要加上throw语句catch才不会被优化掉)
IDE:VC6 今天遇到一个小问题,把我郁闷了好久,××医生的VulEngine不时在wcsstr处发生crash,加了一番强大的参数检查后,再加上了强大的try catch,其实不是很喜欢用try和 ...
- Js中的三个错误语句:try、catch、throw
Js中的三个错误语句:try.catch.throw
- C#中try catch中throw ex和throw方式抛出异常有何不同
我们在C#的try catch代码块中里面经常使用throw语句抛出捕捉到的异常,但是你知道吗使用throw ex和throw抛出捕获到的异常效果是不一样的. 异常捕捉的原理 首先先介绍一下C#异常捕 ...
- java异常处理-finally中使用return和throw语句
java异常语句中的finally块通常用来做资源释放操作,如关闭文件.关闭网络连接.关闭数据库连接等.正常情况下finally语句中不应该使用return语句也不应该抛出异常,以下讨论仅限于java ...
- SQL Server2012中的Throw语句尝试 RAISERROR和THROW比较
SQL SERVER2012实现了类似C#抛出异常的Throw语句.相比较于SQL Server2005之前使用@@ERROR,和SQL Server2005之后使用RAISERROR()引发异常都是 ...
- JavaScript - try catch finally throw
语法: try { tryCode - 尝试执行代码块 } catch(err) { catchCode - 捕获错误的代码块 } finally { finallyCode - 无论 try / c ...
- java:异常机制(try,catch,finally,throw,throws,自定义异常)
* String类中的格式化字符串的方法: * public static String format(String format, Object... args):使用指定的格式字符串和参数返回一个 ...
- throw 语句
我们也可以写代码来抛出异常,抛出异常的语句时throw,其格式如下: throw 异常类的对象名 用throw抛出异常,一般放在方法内部.一个程序可以有多个throw.throw语句执行时,其后面的代 ...
随机推荐
- Protocol Buffer多态
java中有多态的概念,protobuf本身没有多态的概念,但是它有一个扩展的概念. 以聊天消息为例,先看下面这个类图,基类是ChatMessage,子类TextMessage和ImageMessag ...
- SpringMVC中的@PathVariable
@PathVariable是用来动态获得url中的参数的,代码示例如下: 可以在代码中获得lev_1.lev_2和target参数的值看一下 // 支持跳转到WEB-INF/目录下二层目录 @Requ ...
- U3D physics总结
物理系统基于collider, 没有collider的物体不会发生任何主动和被动的物理交互,也不会产生trigger相关消息. 当且仅当A和B都有碰撞体时,两者才有可能发生交互,才有可能产生trigg ...
- LUA GC 简单测试
function table.count(t) if type(t) ~= "table" then assert(false) return end for k, _ in pa ...
- R树空间索引
R树在数据库等领域做出的功绩是非常显著的.它很好的解决了在高维空间搜索等问题.举个R树在现实领域中能够解决的例子吧:查找20英里以内所有的餐厅.如果没有R树你会怎么解决?一般情况下我们会把餐厅的坐标( ...
- Jquery easyui tree的使用
这个ui用的一切都是json数据.树也是如此! 后台需要返回与格式匹配的json数据才能正确加载树. 页面定义一个ui: <ul id="messageInfoAddTree" ...
- Vue.js的表格分页组件
转自:http://www.cnblogs.com/Leo_wl/p/5522299.html 有一段时间没更新文章了,主要是因为自己一直在忙着学习新的东西而忘记分享了,实在惭愧. 这不,大半夜发文更 ...
- JS实现颜色值的转换
从网上看了个案例,是实现颜色值转换的,就想着自己也写个.网上的案例链接找不到了,这里也就不贴了. JavaScript颜色转换的核心就是进制间的转换. rgba(0,0,0,.4)转换成#000000 ...
- chrome全局搜索
在source目录下边: 输入后需要按回车
- 第十课:CSS选择器的介绍和区分
IE7以及以下版本: getElementById是不区分表单元素ID与Name的,因此如果有一个表单元素只定义name,并与我们的目标元素ID同名,并且我们的目标元素在它的后面,那么就会选择到那个表 ...