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 语句 (了解)的更多相关文章

  1. try{}、catch(){}、throw语句

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  2. VC6下 try catch 在release下的杯具(默认情况下,要加上throw语句catch才不会被优化掉)

    IDE:VC6 今天遇到一个小问题,把我郁闷了好久,××医生的VulEngine不时在wcsstr处发生crash,加了一番强大的参数检查后,再加上了强大的try catch,其实不是很喜欢用try和 ...

  3. Js中的三个错误语句:try、catch、throw

    Js中的三个错误语句:try.catch.throw

  4. C#中try catch中throw ex和throw方式抛出异常有何不同

    我们在C#的try catch代码块中里面经常使用throw语句抛出捕捉到的异常,但是你知道吗使用throw ex和throw抛出捕获到的异常效果是不一样的. 异常捕捉的原理 首先先介绍一下C#异常捕 ...

  5. java异常处理-finally中使用return和throw语句

    java异常语句中的finally块通常用来做资源释放操作,如关闭文件.关闭网络连接.关闭数据库连接等.正常情况下finally语句中不应该使用return语句也不应该抛出异常,以下讨论仅限于java ...

  6. SQL Server2012中的Throw语句尝试 RAISERROR和THROW比较

    SQL SERVER2012实现了类似C#抛出异常的Throw语句.相比较于SQL Server2005之前使用@@ERROR,和SQL Server2005之后使用RAISERROR()引发异常都是 ...

  7. JavaScript - try catch finally throw

    语法: try { tryCode - 尝试执行代码块 } catch(err) { catchCode - 捕获错误的代码块 } finally { finallyCode - 无论 try / c ...

  8. java:异常机制(try,catch,finally,throw,throws,自定义异常)

    * String类中的格式化字符串的方法: * public static String format(String format, Object... args):使用指定的格式字符串和参数返回一个 ...

  9. throw 语句

    我们也可以写代码来抛出异常,抛出异常的语句时throw,其格式如下: throw 异常类的对象名 用throw抛出异常,一般放在方法内部.一个程序可以有多个throw.throw语句执行时,其后面的代 ...

随机推荐

  1. [资料]Nginx做IP访问限制以及正则规则

    nginx配置location总结及rewrite规则写法 Nginx Location配置总结 Nginx 禁止某个IP访问 server { listen 443; root /webroot/; ...

  2. Linux ssh登录和软件安装详解

    阿哲Style   Linux第一天 ssh登录和软件安装详解 Linux学习第一天 操作环境: Ubuntu 16.04 Win10系统,使用putty_V0.63 本身学习Linux就是想在服务器 ...

  3. CSS 清除浮动的四种方法

    在实际项目中,我们经常会用到float属性来对页面进行布局.当使用float时,意味着该元素已经脱离了文档流,相当于浮于文档之上,不占据空间.但是针对兄弟元素为文字内容时,会占据一定空间,从而产生文字 ...

  4. [CareerCup] 9.6 Generate Parentheses 生成括号

    9.6 Implement an algorithm to print all valid (e.g., properly opened and closed) combinations of n-p ...

  5. warning: LF will be replaced by CRLF

    一. Git提供了一个换行符检查功能(core.safecrlf),可以在提交时检查文件是否混用了不同风格的换行符.这个功能的选项如下: false - 不做任何检查warn - 在提交时检查并警告t ...

  6. 身份证号码自动生成程序(Python)

    今天收到一个小需求:需要一个自动生成身份证号码的小程序.近期用python较多,因此打算用python实现. 需求细化: 1.身份证必须能够通过身份证校验程序. 2.通过查询,发现身份证号码是有国家标 ...

  7. sublime文档

    英文http://docs.sublimetext.info/en/latest/index.html 翻译http://feliving.github.io/Sublime-Text-3-Docum ...

  8. 翻译-微服务API Gateway

    原文地址:http://microservices.io/patterns/apigateway.html,以下是使用google翻译对原文的翻译. 让我们想象一下你正在建立一个使用微服务模式的网上商 ...

  9. WCF Data Service 使用小结(二) —— 使用WCF Data Service 创建OData服务

    在 上一章 中,介绍了如何通过 OData 协议来访问 OData 服务提供的资源.下面来介绍如何创建一个 OData 服务.在这篇文章中,主要说明在.NET的环境下,如何使用 WCF Data Se ...

  10. Flask 开发全球化应用

    从C#世界迈入python总是令人有一种如释重负之感,同样的效果同样的功能,只需要付出1/10不到的代价,可能正是Python所倡导的简美哲学所带来的威力. 我还深深地记得在ASP.NET中做全球化的 ...