提醒:(1)回头看关于迭代器的知识。

6.1  简单语句

笔记:(1)空语句应加上注释。

         (2)注意循环体后的空语句,是否已改变程序员意图,造成无限循环或错误。

6.2  声明语句

笔记:(1)变量的定义有且只有一个,声明(extern)可以有很多个。

         (2)声明只有在函数体外才能进行初始化,此时属于定义,之后再对其进行定义是错误的。

6.3  复合语句

笔记:(1)块内引入的名字只能在块内使用,块外不可见。

6.4  语句作用域

问题:(1)对于作用域外的变量,是不可能用到其在作用域内的残留值的。这句话是什么意思?

     例如:vector<int>::size_type index=0;

              for(;index!=vec.size();++index)

                   .......;//循环结束后,index的值还是0?

              if(index!=vec.size())

                 .......;//是否是这样:当在外面定义时,后续语句可以使用其在先前语句中的残留值

                         //当在块内定义时,后续语句不能访问此变量?(经程序验证,此理解正确)

6.5  if语句

问题:if(minval>ivec[i]){

             minval=ivec[i];

             occurs=1;

        }//若执行此条件,则将ivec的值给minval,occurs的值为1;

        if(minval==ivec[i])

            ++occurs;//再执行此条件,occurs的值为2?(经程序验证,occurs的值为2)

笔记:当出现if子句多于else子句时,遵守规则是:将else子句配给距离最近的尚未匹配的if子句。

        所以总在if子句后面使用花括号是个不错的办法。

6.6 switch语句

问题:(1)为什么会出现变量未定义?在之前的语句不是已经定义了么?只能在最有一个case标号或defualt之后定义变量,为什么?

         (2)习题6.14(c)

笔记:(1)对于switch语句,漏写break是错误的,会导致程序越过case边界继续执行。

                如果逻辑需要省略break,这种情况很少见,需要注释说明。

         (2)default语句是为了说明在switch之外的情况,至于是否需要执行别的语句,视情况而定,但至少要有一个空语句。

         (3)在统计字符串的空格,换行等字符时,应使用cin的get对象:cin.get()作为输入

         (4)case语句后只能使用常量表达式,或者const 限定的变量。不能直接使用变量。

6.8  for循环语句

问题:习题6.16,为什么当使用结束符来控制输入时,需要将流cin恢复为有效状态?

6.9  do while 语句

问题:习题6.17(b)难道ival的作用域不会被限制在do里边吗?为什么循环条件仍可以使用?

笔记:所有在条件中会用到的变量必须在do之前定义

6.10  break语句

笔记:break出现在循环或switch之外会导致编译错误。

6.12  goto语句

笔记:(1)尽量不使用goto语句,以免程序难以理解和调试。

         (2)向前跳过已经定义过的变量是合法的,向后跳则不合法。

6.13  异常处理

笔记:(1)使用throw来抛出异常,终止程序并移交处理异常的程序。

         (2)如果程序中出现的异常没有经过try的定义,则没有相应的catch来解决,程序会非正常退出。

 

 

posted on 2012-07-11 17:54  fengluo  阅读(105)  评论(0编辑  收藏  举报