没有if语句的分支

时间:2013-01-06 21:27:41

标签: if-statement language-agnostic

是否可以使用if语句在没有的情况下分支代码

2 个答案:

答案 0 :(得分:4)

是的,你可以,GPU风格。

假设你有一个分支的函数,并在最后返回一个值。

float function( float input )
{
    if( input > 0 )
    {
        // do stuff
        finalValue = 2+4+8*input;
        return finalValue ;
    }
    else
    {
        // do other stuff
        finalValue = 1+input;
        return finalValue ;
    }
}

要执行此操作而不进行分支,您可以编写GPU样式的代码:即评估两个分支,然后丢弃最后不想要的分支

float function( float input )
{
    // do stuff..regardless
    finalValue1 = 2+4+8*input;

    // do other stuff..regardless
    finalValue2 = 1+input;

    bool resultMask = input > 0 ; // 1 if should use finalValue1.
    return finalValue1*resultMask   +   finalValue2*(1 - resultMask) ;
}

所以你有它。没有分支的分支,if语句没有if语句。

答案 1 :(得分:1)

取决于“分支”和“如果”的含义。以下任何一个分支,没有“if”。

switch (foo) {

}

或三元运算符,如果你不算数:

x == 0 ? doFunc1() : doFunc2()

如果您的语言支持函数指针:

funcArray[selectedOption]()

你可能很愚蠢而且:

boolean once = true;
while (condition && once) {
  doAWhichNeverReturns();
  once = false; 
} 
doB();

但我不认为这真的能回答你的问题,因为我不知道你要做什么。