0

重複の可能性:
C ++に短絡されていない論理「and」はありますか?
C ++論理&演算子

私はこれに似たコードを持っています:

return ( check1() && check2() && check3() && check4() );

さまざまなチェック関数は、値を返すだけでなく、他のことも行います(たとえば、プリントアウト)。関数は順番に実行されているようで、checkX1つが0を返すとすぐに、残りは実行されません。これは、この方法で行うのが理にかなっています。他の戻り値に関係なく各関数が確実に実行されるようにするための(C ++コードでの)最良の方法は何ですか?

4

5 に答える 5

6
bool ret1 = check1();
bool ret2 = check2();
bool ret2 = check3();
bool ret4 = check4();

return (ret1 && ret2 && ret3 && ret4);
于 2012-10-24T20:34:42.883 に答える
2

ビット単位の and 演算子を使用する

return ( check1() & check2() & check3() & check4() );

これにより、戻る前に各呼び出しが行われます。


ノード:これはハックであり、お勧めしません。

于 2012-10-24T20:38:23.727 に答える
1

1 つの解決策は、bool 変数で各関数の結果を取得し、4 つの変数すべてで実行チェックを行うことです。

bool x1 = check1();
bool x2 = check2();
bool x3 = check3();
bool x4 = check4();
return (x1 && x2 && x3 && x3);

于 2012-10-24T20:36:07.793 に答える
1
bool res = check1();
res &= check2();
res &= check3();
res &= check4();
return res;
于 2012-10-24T21:01:50.960 に答える
0

関数が実行される順序を気にしない場合は、次を使用できます。

return (check1() + check2() + check3() + check4()) == 4;

別の可能性は、関数へのポインターを使用することです。これにより、それらをループで呼び出すことができます。

typedef bool (*f)();

f checks[] = {check1, check2, check3, check4};

bool ret = true;
for (int i=0; i<4; i++)
     ret &= checks[i]();

return ret;

これは 4 つの関数を処理する場合にはあまり役に立ちませんが、4 が単なるデモであり、実際にはもっと多くの関数がある場合 (または拡張の可能性が高い場合)、これにより多数の関数を処理することが比較的簡単になります。必要であれば。

明確さよりも簡潔さを重視する場合は、次のようにすることができます。

bool ret = check1();

return (ret &= check2()), (ret &= check3()), (ret & check4());
于 2012-10-24T20:53:38.463 に答える