1

この行に沿って、C ++のブール値のインプレースANDおよびOR演算子のようなものはありますか?

bool someOk=false;
for(int i=0; i<10; i++){
  someOk||=funcReturningBoolOnSuccess(i);
}

(私は書くことができることを知ってsomeOk=someOk||funcReturningBoolOnSuccess(i)いますが、それほどきれいではありません)。

4

3 に答える 3

3

答えは短く、いいえ、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;
  }
}

はるかに効率的です:)

于 2013-07-11T09:38:20.337 に答える
1

return がである限り、この目的でboolを使用できます(最初の成功後に呼び出すことを厳密に避けたい場合を除きます。その場合は、 some を使用したり、ループの条件を変更したりする必要があります)。|=funcReturningBoolOnSuccess(i);ifbreakfor

結果が値でない場合は、実際にはビット単位の操作であるboolため、おそらく値に変換する必要があります。|=C または C++ の任意の基本型は、 ("bang-bang" または "not-not")boolの単純なトリックによってa に変換できます。これは、非ゼロでゼロの結果の a を作成します。これが私たちが望むものです。 .!!truefalse

于 2013-07-11T09:42:09.253 に答える
0

インプレースではないことはわかっていますが、使いやすいです。

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);
于 2013-07-11T09:42:00.177 に答える