C++Primer:Break、Continue、Goto、Try/异常处理
来源:互联网 发布:ppt美化大师软件 编辑:程序博客网 时间:2024/06/11 04:12
1.break语句:
break语句用于结束最近的while、do while、for、switch语句,并将程序的执行权传递给紧接在被终止语句之后的语句。
<span style="font-size:18px;"># include <iostream>#include <vector>using std::vector;using std::cout;using std::endl;int main(){vector<int> vect;for(int i = 0;i<50; i++){vect.push_back(i);}for(vector<int>::iterator iter = vect.begin();iter != vect.end(); ++iter){cout<<*iter<<" ";}vector<int>::iterator iter1 = vect.begin ();while(iter1 != vect.end ()){if(*iter1 == 47 )break; // OK: Find it;else++iter1; // Not Find, Keep Looking}cout<<endl; //break to here...cout<<*iter1;return 0;}</span>
需要注意的是,break只能出现在循环或者switch结构中,或者出现在嵌套于循环或switch结构中的语句里。
2.continue语句:
continue 语句只能出现在 for、while 或者 do while 循环中,包括嵌套在这些循环内部的块语句中。
3.goto语句:
goto语句提供了函数内部的无条件跳转,从而实现goto语句跳转到同一函数内某个带标号的语句。(从上世纪60年代后期开始,不主张使用goto语句。goto语句使跟踪程序控制流程变得很困难,并且使程序难以理解,也很难修改)
4.Try块与异常处理:
在设计各种软件系统的过程中,处理程序中的错误和其他反常行为是困难的部分之一。像通信交换机和路由器这类长期运行的交互式系统必须将90%的程序代码用于实现错误检测和错误处理。随着基于Web的应用程序在运行时不确定性的增多,越来越多的程序员更加注重错误的处理。
异常就是运行时出现的不正常,例如运行时耗尽了内存或遇到意外的非法输入。异常存在于程序的正常功能之外,并要求程序立即处理。
异常机制提供程序中错误检测与错误处理部分之间的通信。C++的异常处理中包括:
1.throw表达式,错误检测部分使用这种表达式说明遇到了不可处理的错误。可以说,throw引发了异常条件。
2.try块,错误处理部分使用它来处理异常。try语句块以try关键字开头,并以一个或多个catch字句结束。在try块中执行的代码所抛出(throw)的异常,通常会被其中一个catch子句处理。由于他们“处理”异常,catch字句也称为处理代码。
3.由标准库定义的一组异常类,用来在 throw 和相应的 catch 之间传递有关的错误信息。
4.1 throw表达式
系统通过 throw 表达式抛出异常。throw 表达式由关键字 throw 以及尾随的表达式组成,通常以分号结束,这样它就成为了表达式语句。throw 表达式的类型决定了所抛出异常的类型。
举一个简单的例子:
S<span style="font-size:18px;">ales_item item1,item2;std::cin>>item1>>item2;if(item1.same_isbn(item2)){ std::cout<<item1+item2<<std::endl; return 0;}else{ std::cerr<<"Data must refer to same ISBN"<<std::endl; return -1; //indicate failure}</span>在这个例子中,我们可以利用throw抛出异常来改写检测代码:
<span style="font-size:18px;">Sales_item item1,item2;std::cin>>item1>>item2;if(!item1.same_isbn(item2)) throw runtime_error("Data must refer to same ISBN");srd::out<<item1+item2<<std::endl;</span>这段代码检查 ISBN 对象是否不相同。如果不同的话,停止程序的执行,并将控制转移给处理这种错误的处理代码。
throw 语句使用了一个表达式。在本例中,该表达式是 runtime_error 类型的对象。runtime_error 类型是标准库异常类中的一种,在 stdexcept 头文件中定义。我们通过传递 string对象来创建 runtime_error 对象,这样就可以提供更多关于所出现问题的相关信息。
4.2 Try 块
try块的通用语法形式为:try{
program-statements
}catch (exception-specifier){
handler-statement
}catch (exception-specifier){
handler-statement
}//......
try 块以关键字 try 开始,后面是用花括号起来的语句序列块。try 块后面是一个或多个 catch 子句。每个 catch 子句包括三部分:关键字 catch,圆括号内单个类型或者单个对象的声明——称为异常说明符, 以及通常用花括号括起来的语句块。如果选择了一个 catch 子句来处理异常,则执行相关的块语句。一旦 catch 子句执行结束, 程序流程立即继续执行紧随着最后一个 catch 子句的语句。
try 块以关键字 try 开始,后面是用花括号起来的语句序列块。try 块后面是一个或多个 catch 子句。每个 catch 子句包括三部分:关键字 catch,圆括号内单个类型或者单个对象的声明——称为异常说明符, 以及通常用花括号括起来的语句块。如果选择了一个 catch 子句来处理异常,则执行相关的块语句。一旦 catch 子句执行结束, 程序流程立即继续执行紧随着最后一个 catch 子句的语句。
try 语句内的 program-statements 形成程序的正常逻辑。这里面可以包含任意 C++ 语句,包括变量声明。与其他块语句一样,try 块引入局部作用域,在 try 块中声明的变量,包括 catch 子句声明的变量,不能在 try 外面引用。
在前面的例子中,使用了 throw 来避免将两个表示不同书的 Sales_items对象相加。想象一下将 Sales_items 对象相加的那部分程序与负责与用户交流的那部分是分开的, 则与用户交互的部分也许会包含下面的用于处理所捕获异常的代码:
在前面的例子中,使用了 throw 来避免将两个表示不同书的 Sales_items对象相加。想象一下将 Sales_items 对象相加的那部分程序与负责与用户交流的那部分是分开的, 则与用户交互的部分也许会包含下面的用于处理所捕获异常的代码:
<span style="font-size:18px;">while (cin >> item1 >> item2) {try { // execute code that will add the two Sales_items // if the addition fails, the code throws a runtime_error exception} catch (runtime_error err) { // remind the user that ISBN must match and prompt for another pair cout << err.what()<< "\nTry Again? Enter y or n" << endl; char c; cin >> c; if (cin && c == 'n') break; // break out of the while loop}}</span>关键字 try 后面是一个块语句。这个块语句调用处理 Sales_item 对象的程序部分。这部分也可能会抛出 runtime_error 类型的异常。上述 try 块提供单个 catch 子句,用来处理 runtime_error 类型的异常。在执行 try 块代码的过程中,如果在 try 块中的代码抛出 runtime_error 类型的异常, 则处理这类异常的动作在 catch 后面的块语句中定义。本例中, catch输出信息并且询问用户是否继续进行异常处理。如果用户输入'n',则结束while;否则继续循环,读入两个新的 Sales_items 对象。
0 0
- C++Primer:Break、Continue、Goto、Try/异常处理
- C++ 6.11 continue 、goto、try 异常处理
- C++ Primer 学习笔记10 语句 (空语句、if语句、switch语句、for语句、dowhile语句、break语句、goto语句、continue语句、try块和异常处理)
- continue break goto
- 6. break、continue、goto
- break goto return continue
- 【C语言知识点】break语句 、continue语句、goto 语句。
- C语言中的break、continue和goto语句
- c语言基础回顾—(break、continue、goto)
- C语言中break,continue,goto,return语句区别
- try 块和异常处理 (c++primer)
- c++primer之try语句块和异常处理
- 比较 Return/Break/Continue/Goto
- break continue goto Return 区别
- break,continue,goto,return语句
- 控制语句break、continue、goto
- C#学习 第二章 语句控制,if,switch,try-catch,whlie,foreach,break,continue,goto
- C#异常处理“try catch”与vb ”on error goto“
- jquery中attr和prop的区别
- shell 命令:tr 常见命令和介绍
- ShareSDK工具类
- ubuntu14.04远程登录服务-ssh的安装和配置
- 关于实现Extjs动态加载类的方式实现
- C++Primer:Break、Continue、Goto、Try/异常处理
- 解决:dubbo找不到dubbo.xsd报错
- Android学习之Material Design之style
- Start
- 写自己的数组工具类
- 连接器脚本格式注意
- iOS开发之高级视图—— UINavigationController(一)简单导航功能实现
- jenkins部署业务报错undefined method `chomp' for nil:NilClass
- 13周练 H - Bear and Game 【模拟】