问号运算符的多个语句

时间:2013-10-16 15:28:46

标签: c++

我有两个变量

int a, b ;

ab可以包含0 - 3中的任何值,并且根据a和b的值,每个条件应该有几个句子。

我使用嵌套开关:

switch(a)
{
    case go:
    {
        switch(b)
        {
            case go: {...}
            ...
            case write: {...}
        }
    }
    ...
    case 3:
    {
        ...
    }
}

我也有

enum

{
go = 0 ;
wait =1 ;
read = 2;
write =3 ;
}

我有一个非常大的嵌套开关来检查所有4 * 4 = 16条件

我想使用问号? :运算符

来实现 像是一样的东西 (a=b==0) ? Do something ? Do something.

但是我在每种情况下都要做多个陈述。

如何使用此功能? :三元运算符?

提前致谢

1 个答案:

答案 0 :(得分:5)

您可能需要考虑将4 x 4开关块扁平化为单个16路开关:

#define SELECT(a, b) ((a) * 4 + (b))

int select = SELECT(a, b);

assert(a >= 0 && a < 4);  // sanity checking - make sure a and b are valid
assert(b >= 0 && b < 4);

switch (select)
{
case SELECT(0, 0): 
    // ...
    break;
case SELECT(0, 1): 
    // ...
    break;
case SELECT(0, 2): 
    // ...
    break;
case SELECT(0, 3): 
    // ...
    break;
case SELECT(1, 0): 
    // ...
    break;

// ...

case SELECT(3, 3): 
    // ...
    break;
}

请注意,这在C和C ++中都可以正常工作。无论abint还是enum,它都有效(请注意,您可以在SELECT宏中使用实际的枚举标签 - 您不需要使用文字常量。)