在浏览我朋友的代码时,我注意到了这一点:
switch(State &state = getState()) {
case Begin: state = Search; break;
// other stuff similar
}
开关头中的变量是什么?他正在使用 GCC,所以我认为这可能是 GCC 扩展。任何想法?
在浏览我朋友的代码时,我注意到了这一点:
switch(State &state = getState()) {
case Begin: state = Search; break;
// other stuff similar
}
开关头中的变量是什么?他正在使用 GCC,所以我认为这可能是 GCC 扩展。任何想法?
这不是秘密或 GCC 扩展。if
允许在s、while
s 和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
andelse
块上)。
在 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
or的条件下switch
。你会在“重复结构”部分找到类似的东西。
此外,switch
es 适用于可以隐式转换为整数或类型的类的整数或enum
类型或enum
实例(第 6.4.4 节):
在 switch 语句中作为初始化声明的条件的值是声明变量的值,如果它具有整数或枚举类型,或者是该变量隐式转换为整数或枚举类型的值。
实际上,我是从您在“C++ 的隐藏功能”问题上发布的答案中了解到的。所以我很高兴我能提醒你:)