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 编译器选项来禁用这些扩展。