《C++ Primer》讀書筆記(5.4,5.5,5.10)

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: ; 
         } 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章