在允许的情况下更改switch语句键?

时间:2014-02-23 21:24:42

标签: c++ c switch-statement

它是否可行/是否允许使用switch-case语句并在语句中更改密钥?

例如:

temp = 1

switch(temp)
{
    case 1:
         temp = 2;
         //Do something with temp..
    break;
}

这样做的关键在于我不必创建另一个变量,在我的程序中这样做也是有意义的。我并不是要求在switch-case语句中更改为另一个案例,只要它允许重用用作键的变量而没有任何副作用。

3 个答案:

答案 0 :(得分:4)

这很好。事实上,这个星球上的每台状态机都会做与你在这里做的事情相同的事情。

答案 1 :(得分:3)

是的,你可以这样做。事实上,以下是编写lexers的常见做法:

int c = getc(file);
switch(c)
{
case '+':
    c = getc(file); // < `c` modified here!
    switch(c)
    {
    case '+': return OP_INC;
    default: ungetc(c, file); return OP_ADD;
    }
...
}

答案 2 :(得分:0)

虽然使用相同的变量并不是一个好主意,但是代码将起作用,因为分支是在评估switch语句中的表达式时确定的。