开关头中的变量声明?

时间:2012-04-28 17:34:24

标签: c++

在浏览我朋友的代码时,我注意到了这一点:

switch(State &state = getState()) {
case Begin: state = Search; break;
// other stuff similar
}

交换机标头中的变量是什么?他正在使用GCC,所以我认为这可能是GCC扩展。有什么想法吗?

1 个答案:

答案 0 :(得分:9)

这不是秘密或GCC扩展。允许在if s,whileswitch es之类的条件下声明变量。例如:

while (char c = cin.get()) { ... }

if (int* something = (int*)malloc(4)) { // but don't use malloc in C++
    // ...
}

声明初始化后,它们将转换为bool值,如果它们计算为true,则执行该块,否则跳过该块。它们的范围是声明它们的条件的构造的范围(在if的情况下,范围也在所有else ifelse块上。)

在C ++ 03标准的§6.4.1中,它说

  

选择语句选择几个控制流之一。

selection-statement:

    if ( condition ) statement
    if ( condition ) statement else statement
    switch ( condition ) statement

condition:

    expression
    type-specifier-seq declarator = assignment-expression

正如您所看到的,它允许type-specifier-seq declarator = assignment-expressionif条件下的switch。你会在“重复结构”部分找到类似的内容。

此外,switch可以处理可以隐式转换为整数或enum类型的类的整数或enum类型实例(第6.4节) 0.4):

  

条件的值,它是a中的初始化声明   switch语句是声明的变量的值,如果有的话   积分或枚举类型,或隐式转换的变量   否则为整数或枚举类型。

我实际上在“隐藏的C ++特性”问题上学到了这个FROM AN ANSWER YOU POSTED。所以我很高兴我能提醒你:)