我没有深入研究这个想法,但我想知道是否可以用跳转表替换语句。
如果我们有一组像
这样的ifsif(x = 0)
{
...
}
if(x = 1)
{
...
}
if(x = 2)
{
...
}
如果我们有一个包含每个例程指针的表,我们可以直接跳转到与x值相关的例程。
在其他情况下,比如用户输入,让我们假设我们从stdin读取一个字符,我们 会喜欢
if(c = 'a')
{
...
}
if(c = 'b')
{
...
}
我们还可以找到一种方法来根据c
的值来表示跳转表我的问题是,在哪种情况下,完全不可能用跳转表替换if?可以在没有if语句(或等价物)的情况下执行计算
答案 0 :(得分:0)
跳转表仅限于检查相等性的情况。当您需要使用不相等检查时,它们就不太合适了,对于if
条件的OR
语句也是如此。
当然,你总是可以在一个布尔条件下使用退化跳转表,如下所示:
boolean condition = a > b && c < d || e != f;
switch (condition) {
case true: ... break;
case false: ... break;
}
然而,这并不比简单的条件提供任何优势。