I have the following C ++ code:
return lineNum >= startLineNum
&& lineNum <= startLineNum + lines.size() - 1;
Here lineNumis int, startLineNumis int, linesis std::vector<std::string>, and lines.size()has a type size_t.
When lineNumequal to 2, startLineNumequal to 0, and lines.size()equal to 0, the code returns true, although it was expected false. These values were the values displayed in the debugger.
Even after adding parentheses where possible:
return ((lineNum >= startLineNum)
&& (lineNum <= (startLineNum + lines.size() - 1)));
the code still returns incorrectly true.
When I reorganize the code into this form:
int start = startLineNum;
int end = startLineNum + lines.size() - 1;
return lineNum >= start && lineNum <= end;
now returns falseas expected.
What's going on here? I have never encountered this oddity before.
source
share