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. 05Spring_Bean属性的集合类型的注入

  2. 【转】【SSE】基于SSE指令集的程序设计简介

    基于SSE指令集的程序设计简介 作者:Alex Farber 出处:http://www.codeproject.com/cpp/sseintro.asp SSE技术简介 Intel公司的单指令多数据 ...

  3. C语言 百炼成钢3

    //题目7:用*号输出空心菱形图案 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> # ...

  4. JavaScript及其异步实现

    由于javascript本身是单线程模型,这里主要通过Callbacks,Listeners,Control Flow Libraries ,Promises四种方式来实现异步操作. Referenc ...

  5. 1从零开始学习Xamarin.iOS安装篇

    安装和配置xamarin.ios 最近.net 开源新闻很火呀,于是想学习xamarin,早1年前就了解过这个东西,但是一直没有时间来学习,我这里装的是MAC上面的版本,废话不多说开始第一步安装. 概 ...

  6. 学习Shell脚本编程(第3期)_在Shell程序中使用的参数

    位置参数 内部参数 如同ls命令可以接受目录等作为它的参数一样,在Shell编程时同样可以使用参数.Shell程序中的参数分为位置参数和内部参数等. 3.1 位置参数 由系统提供的参数称为位置参数.位 ...

  7. asp.net Core开启全新的时代,用视频来告诉你,学习就是这么SO easy。

    https://channel9.msdn.com/Blogs/NET-Core/What-is-NET-Core 系统大家多发布一些视频的资料,学习起来更方便!我看到很多人发布的博客里面有的时候对于 ...

  8. 怎样写 OpenStack Neutron 的 Extension (一)

    前两篇文章讨论了怎么写一个 Neutron 的插件.但是最基本的插件只包括 Network, Port,和 Subnet 三种资源.如果需要引入新的资源,比如一个二层的 gateway 的话,就需要在 ...

  9. WPF开发时光之痕日记本——终于完工了。。晒晒截图(三)(已上传安装包)

    由于是业余时间学习的 WPF 的相关开发且不怎么会使用 Blend 软件,所以开发这个客户端着实花费了我很长时间,比如文本编辑器的开发,最初是在 Simple.HtmlEditor 的基础上做的修改, ...

  10. nodejs中的Crypto模块

    我是属于实用型的选手,千万别问我过多原理性的东西,我只知道,这个是最好的,我就用它. http://cnodejs.org/topic/504061d7fef591855112bab5