この行に沿って、C ++のブール値のインプレースANDおよびOR演算子のようなものはありますか?
bool someOk=false;
for(int i=0; i<10; i++){
someOk||=funcReturningBoolOnSuccess(i);
}
(私は書くことができることを知ってsomeOk=someOk||funcReturningBoolOnSuccess(i)いますが、それほどきれいではありません)。
答えは短く、いいえ、C++ 構文ではそのような構造は許可されていません。
以下を使用する必要があります。
something = something || something_else;
ただし....関数が成功時にboolを返す場合(成功時にtrueのように)...次のようにしないのはなぜですか?
someOk = funcReturningBoolOnSuccess(i);
とにかく失敗してもfalseを返さないのでしょうか? 非論理的なようです。
やってみませんか:
bool someOk=false;
for(int i=0; i<10; i++){
if (funcReturningBoolOnSuccess(i)) {
someOk = true;
break;
}
}
はるかに効率的です:)
return がである限り、この目的でboolを使用できます(最初の成功後に呼び出すことを厳密に避けたい場合を除きます。その場合は、 some を使用したり、ループの条件を変更したりする必要があります)。|=funcReturningBoolOnSuccess(i);ifbreakfor
結果が値でない場合は、実際にはビット単位の操作であるboolため、おそらく値に変換する必要があります。|=C または C++ の任意の基本型は、 ("bang-bang" または "not-not")boolの単純なトリックによってa に変換できます。これは、非ゼロでゼロの結果の a を作成します。これが私たちが望むものです。 .!!truefalse
インプレースではないことはわかっていますが、使いやすいです。
void OR(bool& x,bool y)
{
x = x || y;
}
/* later on */
bool someOk = false;
// someOk = false
// funcRetBoolOnSuc(8) = false
OR(someOk,funcRetBoolOnSuc(8));
// someOk = false
// someOk = false
// funcRetBoolOnSuc(8) = true
OR(someOk,funcRetBoolOnSuc(9));
// someOk = true
または、 bool は値として 0,1 のみを受け入れるため、次のようにすることもできます。
someOk |= funcRetBoolOnSuc(x);