共用方式為


切換陳述式 (C++)

在多個區段的程式碼中,整數類資料的運算式的值而定,可讓選取項目。

switch ( expression )
   case constant-expression : statement
   [default  : statement]

備註

運算式必須是整數類資料型別或模稜兩可的轉換成整數類資料型別是類別型別。如所述,執行整數提升整數提升

switch陳述式主體只包含一系列的案例標籤,以及一個選擇性預設標籤。沒有兩個常數運算式,在案例陳述式可評估為相同的值。預設標籤可以出現一次。標記的陳述式不會進行的語法需求而定,但switch ,卻沒有它們的意義。預設的陳述式不需要是結尾 ; 它可以出現在任何地方的 switch 陳述式的主體。大小寫或預設的標籤只能出現在 switch 陳述式內。

常數運算式 在每個 案例 標籤就會轉換成的型別 運算式 ,相較於 運算式是否相等。將控制項傳遞至陳述式的案例 常數運算式 的值 運算式。下表顯示所產生的行為。

切換陳述式的行為

條件

動作

已轉換的值符合升級的控制運算式。

控制將轉移到該標籤的陳述式。

無常數的比對中的常數案例標籤。 預設標籤不存在。

控制將轉移到預設標籤。

無常數的比對中的常數案例標籤。 預設標籤不存在。

控制將轉移至之後的陳述式switch陳述式。

如果找到相符的運算式,則控制項將由後續不 impeded 案例預設標籤。中斷陳述式用來停止執行,並在之後的陳述式中傳出控制權switch陳述式。而不中斷陳述式,從相符的每個陳述式案例的結尾標籤switch,包括預設,會執行。例如:

// switch_statement1.cpp
#include <stdio.h>

int main() {
   char *buffer = "Any character stream";
   int capa, lettera, nota;
   char c;
   capa = lettera = nota = 0;

   while ( c = *buffer++ )   // Walks buffer until NULL
   {
      switch ( c )
      {
         case 'A':
            capa++;
            break;
         case 'a':
            lettera++;
            break;
         default:
            nota++;
      }
   }
   printf_s( "\nUppercase a: %d\nLowercase a: %d\nTotal: %d\n",
      capa, lettera, (capa + lettera + nota) );
}

在上述範例中, capa就會遞增,如果c也是大寫A。break之後的陳述式capa++結束執行switch陳述式主體和控制傳遞至while迴圈。沒有break陳述式中, lettera和nota也會增加。類似的目的由break陳述式case 'a'。如果c是小寫a, lettera就會遞增, break陳述式終止switch陳述式主體。如果c不是a或A、 default陳述式時。

內部的段switch陳述式可以包含具初始設定的定義,只要它們是可執行到,也就是不可能執行的所有路徑的略過。使用這些宣告所引入的名稱會擁有區域範圍。例如:

// switch_statement2.cpp
// C2360 expected
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
   switch( tolower( *argv[1] ) )
   {
       // Error. Unreachable declaration.
       char szChEntered[] = "Character entered was: ";
   
   case 'a' :
       {
       // Declaration of szChEntered OK. Local scope.
       char szChEntered[] = "Character entered was: ";
       cout << szChEntered << "a\n";
       }
       break;
   
   case 'b' :
       // Value of szChEntered undefined.
       cout << szChEntered << "b\n";
       break;
   
   default:
       // Value of szChEntered undefined.
       cout << szChEntered << "neither a nor b\n";
       break;
   }
}

A switch陳述式可以巢狀。在這種情況下, 案例預設標籤關聯的最接近switch陳述式,將它們圍住。

Microsoft 專有的

Microsoft c 沒有限制的大小寫的值,以數字switch陳述式。數目只受限於可用記憶體。ANSI c 需要至少 257 case 標記中允許switch陳述式。

Microsoft c 的預設值是 Microsoft 擴充功能會啟用。使用 /Za 編譯器選項來停用這些擴充功能。

請參閱

參考

選擇陳述式 (C++)

C + + 關鍵字

在陳述式的情況下,使用標籤