现在的位置: 首页 > 综合 > 正文

《C++ Primer》读书笔记(5.4,5.5,5.10)

2013年04月30日 ⁄ 综合 ⁄ 共 1592字 ⁄ 字号 评论关闭

isalpha()方法

是标准C 库的一个例程,如果它的参数是一个英文字母,则返回值为true。为了使用它 程序员必须包含系统头文件ctype.h 

         char ch;
	 if ( isalpha( ch )) 
              ++consonantCnt; 

关于switch 语句

    声明语句也可以被放在switch 语句的条件中 如下所示  
as3中不成立

         switch( int ival = get_response() ) 

    ival 被初始化并且读初始化值成为与每个case 标签作比较的值, ival 在整个switch 语句中是可见的,但在其外面并不可见。

    把一条声明语句放在与case 或default 相关联的语句中非法的,除非它被放在一个语句块中。例如 下列代码将导致编译时刻错误 

         case illegal_definition: 
               // 错误 :声明语句必须被放在语句块中 
               string file_name = get_file_name(); 
               // ... 
               break; 

    如果一个定义没有被包围在一个语句块中,那么它在case 标签之间是可见的,但是只有当定义它的case 标签被执行时,它才能被初始化。因此需要一个语句块来保证名字是可见的,并且也只有这个语句块才能够使用它,而且可以保证它只在这个语句块中才能被初始化 。

为了使我们的程序能通过编译 必须引入语句块 重新实现case 标签如下 

         case ok: 
               { 
                  // ok: 声明语句被放在语句块中 

                      string file_name = get_file_name(); 
                      // ... 
                      break; 
                 } 

for语句

下面都是合法的condition 实例 

         (...; *st1++ = *st2++; ... ) 
         (...; char ch = getNextChar(); ... ) 

在标准C++之前 定义在init-statement 中的对象的可视性可以扩展到for 循环包含的语句块之外,例如 ,给定下面两个for 循环 它们位于同一个语句块之中 

{ 
   // 在标准C++中合法 但是在标准C++之前 ival 被定义两次 所以不合法 
   for ( int ival = 0; ival < size; ++ival ) // ... 
   for ( int ival = size -1; ival >= 0; --ival ) // ... 
} 

as3与标准C++之前情况相同

while 循环

condition 可以是表达式 如 

         bool quit = false; 

         // ... 
         while ( ! quit ) { 
               // ... 
               quit = do_something(); 
         } 
         string word; 
         while ( cin >> word ) { ... } 

    或是初始化定义 如 

         while ( symbol *ptr = search( name )) { 
               // do something 
         } 

 *parray_begin++的理解方式

把当前元素的值加到 sum上 ,然后增加指针使其指向下一个元素 

 goto 语句

    goto 语句提供了函数内部的无条件分支,它从goto 语句跳转到同一函数内部某个位置的一个标号语句。在当前关于良好的程序设计实践的看法中,它的用法被认为是应该抛弃的

    goto 语句的语法形式如下 

         goto label; 

    这里的label 是用户定义的标识符 标号[ labe ] 。 语句只能用作goto 的目标 必须由冒号结束,且标号语句不能紧接在结束右花括号的前面。在标号语句后面加一个空语句 是处理这种限制的典型方法 例如 

               end: ;   // 空语句 
         } 

    goto 语句不能向前跳过没有被语句块包围的声明语句 例如 下面的代码将导致编译时刻错误 

         int oops_in_error() 
         { 
               // mumble 
               goto end; 


               // 错误 : 跳过声明语句 
               int ix = 10; 
               // ... code using ix 


               end: ; 
         }

     正确的做法是把声明语句以及使用该声明的语句放在一个语句块中,例如 

         int ok_its_fixed() 
         { 
               // mumble 
               goto end; 
               { 
                  // ok: 在语句块中声明语句 
                  int ix = 10; 


                  // ... code using ix 
               } 
               end: ; 
         } 

抱歉!评论已关闭.