web-dev-qa-db-ja.com

C ++:forループ内の複数の終了条件(複数の変数):AND-edまたはOR -ed?

Forループおよび複数の変数と条件。

Forループを使用して、ソースインデックスと宛先インデックスを設定し、配列内のアイテムをコピーしています。

for(int src = 0, dst = 8;
    src < 8, dst >= 0;
    src ++, dst --)
{
    arr2[dst] = arr1[src];
}

とにかくそのようなもの。

(AND)|| (||)

私の質問は、終了条件についてです。ここには2つあります。 src < 8およびdst >= 0。これらの条件はAND-ed(&&)またはOR-ed(||)。

さらに説明すると、条件は次のように評価されますか?

(src < 8) && (dst >= 0)

それとも、このように評価されていますか?

(src < 8) || (dst >= 0)

それともまったく違うものですか?論理的に行うことは、上記で指定した2つの方法のいずれかを評価することであり、他の方法ではないと思います。

12
user3728501

コンマ演算子は正しい式の値を返すので、次のように記述します。

 src < 8, dst >= 0;

条件はdst >= 0を書くのと同じです。この場合、src < 8は2番目の条件とは別に評価されるため、完全に無視され、2番目の条件が返されます。これはANDまたはORに評価されませんが、実際には最初のチェックを完全に「破棄」する効果があります。

これを正しく評価したい場合は、2つのオプションのいずれかを使用する必要があります(||または&&を介して動作を明示的に指定します)。

詳細については、 コンマ演算子 :を参照してください。

式のセットで値を評価する必要がある場合は、右端の式のみが考慮されます。

19
Reed Copsey

コンマ演算子は最初の式を評価し、結果を破棄します。次に、2番目を評価し、それがifでテストされた値です。あなたの状態は&&でも||でもないことがわかりますただし、if(dst> = 0)とまったく同じように動作します。このフォームは、テストが実行される前にループの最後で値を変更するのに役立つ場合があります。

2
David Elliman