博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ Primer 学习笔记(第五章:语句)
阅读量:7183 次
发布时间:2019-06-29

本文共 2769 字,大约阅读时间需要 9 分钟。

hot3.png

##C++ Primer 学习笔记(第五章:语句)


[TOC]


###5.1 简单语句

  1. 空块的作用等价于空语句。

###5.2 语句作用域


###5.3 条件语句

  1. 悬垂else:else只与离他最近的尚未匹配的if匹配。

  2. switch语句:switch括号里的表达式的值必须能转换成整数类型,然后与每个case里的标签值比较。case标签也必须是整形的常量表达式,且任意两个标签值不能相同。

char ch = getVal();int ival = 42;switch (ch){	 case 3.14://错误:case标签不是一个整数	 case ival://错误:case标签不是一个常量}

switch语句中如果某个case标签匹配成功,将从该标签开始往后顺序执行所有case分支(注意不再有匹配标签的限制,而是完全执行),除非程序显式地中断(break)。而如果希望两个或更多个值共享同一组操作时,就会故意省略掉break语句,使得程序能够连续执行若干个case标签。例如:

unsigned vowelCnt = 0;//...switch (ch){	 case 'a':	 case 'e':	 case 'i':	 case 'o':	 case 'u'://以上五个标签也可以写在一行里		 ++vowelCnt;		 break;}
unsigned aCnt = 0, eCnt = 0, iCnt = 0, oCnt = 0, uCnt = 0;char ch;while (cin >> ch)	 switch (ch) {		 case 'a':        case 'A':	         ++aCnt;            break;        case 'e':        case 'E':            ++eCnt;            break;        case 'i':        case 'I':            ++iCnt;            break;        case 'o':        case 'O':            ++oCnt;            break;        case 'u':        case 'U':            ++uCnt;            break;   }

###5.4 迭代语句

  1. 当不确定要迭代多少次,或者在循环结束后需要访问控制变量时,使用while循环比较合适。

  2. for语句中定义的对象只在for循环体内可见。

for (init-statement; condition; expression)	 statement
  1. init-statement可以定义多个对象,但是只能有一条声明语句。因此所有变量的基础类型必须相同。

  2. for语句可以省略掉任意一个部分:

auto beg = v.begin();for (; beg != v.end() && *beg >= 0; ++beg)	 ;
for (int i = 0; ; ++i)	 //对i处理,内部代码负责终止过程
vector
v;for (int i; cin >> i; ) v.push_back(i);//
  1. 范围for语句
for (declaration : expression)	 statement

expression必须是一个序列,包括:花括号括起来的初始值表、数组或者vectorstring等类型对象,它们的共同点是可以返回迭代器的beginend成员。所以不能通过范围for语句来增加容器的元素。

  1. do while语句中不允许在条件中定义对象。注意while后面有;
do{//...}while(/*...*/);

###5.5 跳转语句

  1. break语句的作用范围仅限于最近的循环或者switch

  2. continue语句终止最近的循环(forwhiledo while)中的当前迭代,并立即开始下一次迭代。


###5.6 try语句块和异常处理

  1. throw表达式:表达遇到了无法处理的问题。
throw runtime_error("...");
  1. try语句块:抛出异常。
try{	 program-statements//程序的正常逻辑}catch (exception-declaration){//异常声明	 handler-statements}catch (exception-declaration){	 handler-statements}//...

注意try语句块内声明的变量在块外部无法访问,特别是在catch子句内也无法访问。

  1. 当异常被抛出时,首先搜索抛出该异常的函数。如果没找到匹配的catch子句,终止该函数,并在调用该函数的函数中继续寻找,以此类推,沿着程序的执行路径逐层回退,直到找到适当类型的catch子句为止。 如果还是没有找到任何匹配的catch子句,程序将转到名为terminate的标准库函数,而执行该函数将导致程序非正常退出。对于没有任何try语句块定义的异常,也将按照这种方式处理。

  2. C++标准异常定义在4个头文件中: exception定义了最通用的异常类exception,只报告异常的发生,不提供额外信息。 stdexcept定义了几种常用的异常类,如runtime_errorrange_error等。 new头文件定义了bad_alloc异常类型。(12章) type_info头文件定义了bad_cast异常类型。(19章)

  3. 异常类型只定义了一个名为what的成员函数,返回值是一个C风格字符串常量,用于提供一些异常的文本信息。

int a, b;	cout << "Input:" << endl;	while (cin >> a >> b){		try{			if (b == 0)				throw runtime_error("divisor is 0");			cout << static_cast
(a) / b << endl; break; }catch (runtime_error err){ cout << err.what() << endl; cout << "Try again" << endl; cout << "Input:" << endl; } }

转载于:https://my.oschina.net/u/2359158/blog/495111

你可能感兴趣的文章
HDU-1016 Prime Ring Problem DFS
查看>>
MOSS 2007 入门 : 站点定义和站点模板
查看>>
网页性能优化{雅虎[转载]}
查看>>
CentOS6.2下搭建LVS(DR)+Keepalived实现高性能高可用负载均衡
查看>>
强制旋转iPhone界面
查看>>
最近琢磨出了个测试数据的小技巧
查看>>
vector-list-deque(转)
查看>>
linux 设置时间 date命令
查看>>
键盘设备三星在Android上的改进对Developer的影响
查看>>
分区视图(转载)
查看>>
高性能MySql进化论(一):数据类型的优化_上
查看>>
算法起步之Kruskal算法
查看>>
昨天帮同学的学校写了首校歌
查看>>
Oracle 监听器无法启动(TNS-12555,TNS-12560,TNS-00525)
查看>>
malloc、calloc、realloc三者的差别
查看>>
百度没出新算法之前这样的最好的的优化方案
查看>>
free 一个指针时【 retval = HeapFree(_crtheap, 0, pBlock);】报错的原因
查看>>
网易微专业大数据工程师
查看>>
查看、修改oracle字符集,查看oracle版本
查看>>
JavaScript引用类型之Array数组的栈方法与队列方法
查看>>