switch语句(C++)

基于整型表达式的值允许在代码的多个部分的中,选择。

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

备注

表达式 必须是整数类型对于整型一明确的转换或类类型。整数提升执行这些 整数提升所述。

switch 语句体由一系列 用例 标签和可选 默认 标签。在 用例 语句的两个常数表达式的计算结果不能为同一个值。默认 标签只能出现一次。labeled 语句不是语法要求,但是, switch 语句是无意义的不包括。默认语句不需要显示在末尾;它可以显示任何位置于 switch 语句的主体。用例或默认标签只能出现在 switch 语句中。

在每个 用例 标签的 常数表达式 转换为 表达式的 类型并与相等的 表达式进行比较 。控件传递给 用例常数表达式 匹配 表达式的值的语句。得到的行为如下表所示。

switch 语句行为

Condition

操作

转换后的值与提升的控制表达式。

控件传输到在该标签的语句。

常数都不匹配 " 用例 标签的常量; 默认 标签存在。

控件传输到 默认 标签。

常数都不匹配 " 用例 标签的常量; 默认 标签不存在。

控件调用该语句在 switch 语句之后。

如果找到匹配的表达式,控件不会被中的后续 用例默认 标签会影响。中断 语句用于停止执行并将控制转移到该语句在 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) );
}

在上面的示例中,则为; c 是大写 A, capa 增加。break 语句,在 capa++ 停止 switch 语句曲线和控件之后执行传递给 while 循环。不 break 语句, lettera 和 nota 还会增加。一个类似的目的由 case 'a'的 break 语句提供服务。如果 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;
   }
}

switch 语句可以嵌套。在这种情况下, 用例默认 标签与将它们的最接近的 switch 语句。

Microsoft 专用

Microsoft C 不限制用例值的数量。 switch 语句。该数字仅受可用内存的限制。ANSI C 在 switch 语句需要至少 257 个 case 标签允许的。

Microsoft C 的默认值为 Microsoft 扩展启用。使用 /Za 编译器选项来禁用这些扩展。

请参见

参考

select语句(C++)

C++关键字

使用在case语句的标签