在浏览我朋友的代码时,我注意到了这一点:
switch(State &state = getState()) {
case Begin: state = Search; break;
// other stuff similar
}
交换机标头中的变量是什么?他正在使用GCC,所以我认为这可能是GCC扩展。有什么想法吗?
答案 0 :(得分:9)
这不是秘密或GCC扩展。允许在if
s,while
和switch
es之类的条件下声明变量。例如:
while (char c = cin.get()) { ... }
或
if (int* something = (int*)malloc(4)) { // but don't use malloc in C++
// ...
}
声明初始化后,它们将转换为bool
值,如果它们计算为true
,则执行该块,否则跳过该块。它们的范围是声明它们的条件的构造的范围(在if
的情况下,范围也在所有else if
和else
块上。)
在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-expression
或if
条件下的switch
。你会在“重复结构”部分找到类似的内容。
此外,switch
可以处理可以隐式转换为整数或enum
类型的类的整数或enum
类型或实例(第6.4节) 0.4):
条件的值,它是a中的初始化声明 switch语句是声明的变量的值,如果有的话 积分或枚举类型,或隐式转换的变量 否则为整数或枚举类型。
我实际上在“隐藏的C ++特性”问题上学到了这个FROM AN ANSWER YOU POSTED。所以我很高兴我能提醒你:)