この行に沿って、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);
if
break
for
結果が値でない場合は、実際にはビット単位の操作であるbool
ため、おそらく値に変換する必要があります。|=
C または C++ の任意の基本型は、 ("bang-bang" または "not-not")bool
の単純なトリックによってa に変換できます。これは、非ゼロでゼロの結果の a を作成します。これが私たちが望むものです。 .!!
true
false
インプレースではないことはわかっていますが、使いやすいです。
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);