Question

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
{
  ...
}

The condition behaves like the OR operator is evaluating the option on the right only if the file on the left reach the end (returning a FALSE) and it doesn't evaluate them at the same time.

I know that the evaluation of a statement has nothing to do with the operator itself or with its own precedence rules, but my program it's not supposed to work like I'm imaging with both statements being evaluated at the same time ?

Was it helpful?

Solution

The OR operator is a short circuit operator, meaning that if one side evaluates to true the other side is never actually executed. If your intention is to have both sides of the OR evaluated then you might want to reconsider how your code is written.

OTHER TIPS

That's how boolean OR operates in most programming languages; this behavior is called short-circuit evaluation.

If you want to always evaluate both expressions, do so individually and then use the results inside the conditional:

std::getline(file_1, dummy_1);
std::getline(file_2, dummy_2);
if (file_1 || file_2) { ... }

This is called short circuiting. Please check the C FAQ.

You can use bitwise logical operator '|' to guarantee the execution of both expressions. But even then, the execution order is not defined in C or C++. (Java would execute from left to right).

if (readline(this_line) | readline(that_line) ) ...
which ever line is read first, is arbitrary.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top