ステートメントを使用せずにコードを分岐することは可能ですか?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
「ブランチ」と「if」の意味によって異なります。「if」のない、以下のブランチのいずれか。
switch (foo) {
}
または、数えない場合は三項演算子:
x == 0 ? doFunc1() : doFunc2()
お使いの言語が関数ポインターをサポートしている場合:
funcArray[selectedOption]()
あなたはばかげて行うことができます:
boolean once = true;
while (condition && once) {
doAWhichNeverReturns();
once = false;
}
doB();
しかし、あなたが何をしようとしているのかわからないので、これがあなたの質問に本当に答えているとは思いません。
于 2013-01-06T21:36:32.323 に答える