-1
std::ifstream file_1(argv[1]);
std::ifstream file_2(argv[2]);
...
std::string dummy_1;
std::string dummy_2;
...
while(std::getline(file_1, dummy_1) || std::getline(file_2, dummy_2)) // the problem
{
  ...
}

この条件は、左側のファイルが最後に到達し (FALSE を返す)、それらを同時に評価しない場合にのみ、OR 演算子が右側のオプションを評価するように動作します。

ステートメントの評価は、演算子自体や独自の優先順位規則とは何の関係もないことを知っていますが、私のプログラムは、両方のステートメントが同時に評価されていることをイメージしているようには機能しないはずです?

4

4 に答える 4

4

これが、ほとんどのプログラミング言語でブール OR が機能する方法です。この動作は短絡評価と呼ばれます。

両方の式を常に評価する場合は、個別に評価してから、条件内で結果を使用します。

std::getline(file_1, dummy_1);
std::getline(file_2, dummy_2);
if (file_1 || file_2) { ... }
于 2012-11-12T12:06:55.627 に答える
4

OR 演算子は短絡演算子です。つまり、一方が true と評価された場合、もう一方が実際に実行されることはありません。OR の両側を評価することが意図されている場合は、コードの記述方法を再検討することをお勧めします。

于 2012-11-12T12:06:11.630 に答える
1

ビットごとの論理演算子 '|' を使用できます 両方の式の実行を保証します。ただし、その場合でも、実行順序は C または C++ では定義されていません。(Java は左から右に実行されます)。

if (readline(this_line) | readline(that_line) ) ...
どちらの行が最初に読み取られるかは任意です。

于 2012-11-12T12:08:36.520 に答える
1

これを短絡と呼びます。C FAQを確認してください。

于 2012-11-12T12:06:32.210 に答える