在浏览我朋友的代码时,我注意到了这一点:
switch(State &state = getState()) {
case Begin: state = Search; break;
// other stuff similar
}
Run Code Online (Sandbox Code Playgroud)
交换机头中的变量是什么?他正在使用GCC,所以我认为这可能是GCC扩展.任何的想法?
这不是秘密或GCC扩展.允许变量在ifs,whiles和switches之类的条件下声明.例如:
while (char c = cin.get()) { ... }
Run Code Online (Sandbox Code Playgroud)
要么
if (int* something = (int*)malloc(4)) { // but don't use malloc in C++
// ...
}
Run Code Online (Sandbox Code Playgroud)
在声明它们被初始化之后,它们被转换为bool值,并且如果它们评估到true块被执行,则跳过该块.它们的范围是它们被声明的条件的构造(并且在if范围内,范围也在所有else if和else块上).
它说,在C++ 03标准的§6.4.1中
选择语句选择几个控制流之一.
Run Code Online (Sandbox Code Playgroud)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.4节):
在switch语句中作为初始化声明的条件的值是声明变量的值(如果它具有整数或枚举类型),或者是隐式转换为整数或枚举类型的变量.
我实际上是从你在"C++的隐藏特性"问题上发表的答案中了解到这一点.所以我很高兴我能提醒你:)
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |