C++primer学习笔记-----5.4~5.5

来源:互联网 发布:西游记唐僧知乎 编辑:程序博客网 时间:2024/06/10 14:30

5.4 迭代语句


【迭代语句通常称为循环。
while 和for 语句在执行循环体之前检查条件,do while 语句先执行循环体,然后再检查条件。】

5.4.2 传统的for 语句


【for 循环的语法形式:
for (init-statement; condition; expression)    statement

【和其他的声明一样,init-statement 也可以定义多个对象,但是init-statement 只能有一条声明语句,因此所有变量的基础类型必须相同
for (decltype(v.size()) i = 0, sz = v.size(); i != sz; ++i;)

for 语句能省略掉init-statement、condition、expression 中的任何一个(或者全部)
只要循环所必须的逻辑功能在其他位置被等价的实现。】

5.4.3 范围for 语句


范围for 语句的定义源于与之等价的传统for 语句
for (auto &i : v)for(auto beg = v.begin(), end = v.end(); beg != end; ++beg)    auto &i = *beg;
上述两种语句是等价的,这也解释了为什么范围for 语句的循环体内不能出现改变序列长度的代码,因为序列长度一开始就是预设好了不会变的。】

5.4.4 do while 语句


【do while 语句的语法形式是:
do    statementwhile (condition);
do while 语句和while 语句非常相似,唯一的区别是do while 语句先执行循环体后检查条件;
无论条件的值如何,都至少执行一次循环。

【对于do while 来说先执行语句或者块,后判断条件,所以不允许在条件部分定义变量。】

5.5 跳转语句


【跳转语句中断当前的执行过程。C++ 预言提供了4种跳转语句:breal、continue、goto 和return。】

5.5.1 break 语句


break 语句负责终止离它最近的迭代语句或者switch 语句,并从这些语句之后的第一条语句开始继续执行
break 语句只能出现在迭代语句或者switch 语句的内部。】

5.5.2 continue 语句


continue 语句终止最近循环中的当前迭代过程并立即开始下一次迭代。(其效果等同于将程序跳转至本次迭代过程的结束位置,一般是循环体的最末。)
continue 语句只能出现在迭代语句的内部。】

5.5.3 goto 语句


【goto 语句的作用是从goto 语句无条件跳转到同一函数内的另一条语句。
最好不要在程序中使用goto 语句,因为它使得程序既难理解又难修改。】

【goto 语句的语法形式是:
goto label;
其中,label 是用于标识一条语句的标识符。带标签语句是一种特殊的语句,在它之前有一个标识符以及一个冒号
end: return; // 带标签语句,可以作为goto 的目标,其中end 即是label
标签标识符独立于变量或其他标识符的名字,因此标签标识符可以和程序中的其他实体的标识符使用同一个名字而不会相互干扰
goto 语句和控制权转向的那条带标签的语句必须位与同一个函数之内。】

【和switch 语句类似,goto 语句也不能将程序的控制权从变量的作用域之外转移到作用域之内。(还是指带初始化的变量定义不能跳过
向前跳过一个已经执行的定义并再次执行该定义是合法的。跳回变量定义之前意味着系统将销毁该变量,然后重新创建它:
begin:    int sz = get_size();if (sz <= 0)    goto begin;
可以参考在循环语句的条件部分使用变量定义,应该也是每次循环开始前销毁该同名变量并重新创建。】
0 0