是否可以在不使用if
语句的情况下分支代码?
问问题
1337 次
2 回答
5
是的,你可以,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 语句。
于 2013-01-06T21:27:41.300 回答
1
取决于您所说的“分支”和“如果”是什么意思。以下任何一个分支,没有“如果”。
switch (foo) {
}
或者三元运算符,如果你不计算:
x == 0 ? doFunc1() : doFunc2()
如果您的语言支持函数指针:
funcArray[selectedOption]()
你可以很傻,做:
boolean once = true;
while (condition && once) {
doAWhichNeverReturns();
once = false;
}
doB();
但是我认为这并不能真正回答您的问题,因为我不知道您要做什么。
于 2013-01-06T21:36:32.323 回答