第五章 语句
1.简单语句
别漏写分号也别多写分号,如果是空语句需要注释。
while (iter!=svec.end()) ; //循环体时空语句
++iter; //递增运算不属于循环的一部分
复合语句:用花括号括起来的语句和声明的序列,也称作块。一个块就是一个作用域,在块中引入的名字只能在块内部及子块中访问。
块不以分号结束。
2.条件语句(if和switch)
1.if
else与离他最近尚未匹配的if匹配。注意使用花括号。
2.switch
case标签必须是整型常量表达式。
注意不要漏写break;
**default标签:**定义一个default标签很有用,告诉读者我们考虑到了默认的情况,但是标签后面必须有一条语句或者另一个case标签,可以是空语句或者空语句块。
如果要在case分支内定义并初始化变量,**应该把变量定义在块内,**确保后面的case标签都在变量作用域之外。
3.迭代语句(while,for)
1.while
不确定要迭代多少次,或者循环结束想访问循环控制变量可以用while。
2.传统for循环
for语句头中定义的对象只在for循环体内可见。
for(初始表达式;情况;表达式)
中任意一个都可以省略
3.范围for语句
遍历容器或者其它序列的所有元素。
4.do while
不管条件的值是什么,都会先执行一次循环。
4.跳转语句(break,continue,goto,return)
1.break
终止离它最近的while,do while,for, switch语句
2.continue
终止最近的循环的当前迭代闭关立即开始下一次循环。
3.goto
从goto语句无条件跳转到同一函数的另一条语句。
**不要在程序中使用goto语句(**不是我说,那你发明它干嘛??)
标签语句定义:end: return
5.try语句块和异常处理
1.throw表达式
throw+表达式+;
表达式的类型就是抛出的异常类型,通常说throw引发(raise)了异常。
if(a!=b)
throw runtime_error("you are stupid"); //runtime_over是标准库异常类型的一种
2.try 语句块
try{ 程序}
catch(异常声明){ }
catch(异常声明){ }
每个标准库异常类型都定义了what的成员函数,这些函数没有参数,返回值是C风格字符串(const char*)
异常被抛出时,首先搜索抛出异常的函数,如果没找到匹配的catch,终止该函数,并在调用该函数的函数中继续寻找,如果还没找到,终止这个新函数,继续搜索。如果一直没找到匹配的catch子句,程序转到名为terminata的标准库函数,导致程序非正常退出。
3.标准异常
C++标准库定义了一组类,用于报告标准库函数遇到的问题。
exception头文件定义了最通用的异常类exception。只报告异常的发生,不提供额外信息。
stdexcept头文件定义了一种常用异常类。
new头文件定义了bad_alloc异常类型。
type_info头文件定义了bad_cast异常类型。
只能以默认初始化的方式初始化exception,bad_alloc,type_info对象,以string对象或者C风格字符串初始化其它异常类型。
``catch(runtime_error err){`
cout<<err.what()<<endl;
`}``