是否存在if语句无法通过跳转表替换的情况?

时间:2014-09-27 23:09:20

标签: java c logic

我没有深入研究这个想法,但我想知道是否可以用跳转表替换语句。

如果我们有一组像

这样的ifs
if(x = 0)
{
...
}
if(x = 1)
{
...
} 
if(x = 2)
{
...
}

如果我们有一个包含每个例程指针的表,我们可以直接跳转到与x值相关的例程。

在其他情况下,比如用户输入,让我们假设我们从stdin读取一个字符,我们  会喜欢

if(c = 'a')
{
...
}
if(c = 'b')
{
...
} 

我们还可以找到一种方法来根据c

的值来表示跳转表

我的问题是,在哪种情况下,完全不可能用跳转表替换if?可以在没有if语句(或等价物)的情况下执行计算

1 个答案:

答案 0 :(得分:0)

跳转表仅限于检查相等性的情况。当您需要使用不相等检查时,它们就不太合适了,对于if条件的OR语句也是如此。

当然,你总是可以在一个布尔条件下使用退化跳转表,如下所示:

boolean condition = a > b && c < d || e != f;
switch (condition) {
case true: ... break;
case false: ... break;
}

然而,这并不比简单的条件提供任何优势。