我有以下的C++代码:
在这里,
当
即使在可能的情况下添加了括号:
return lineNum >= startLineNum
&& lineNum <= startLineNum + lines.size() - 1;
在这里,
lineNum
是一个 int
,startLineNum
是一个 int
,lines
是一个 std::vector<std::string>
,而 lines.size()
的类型是 size_t
。当
lineNum
为2,startLineNum
为0,且 lines.size()
为0 时,代码返回 true
,尽管预期应该是 false
。这些值是调试器中显示的值。即使在可能的情况下添加了括号:
return ((lineNum >= startLineNum)
&& (lineNum <= (startLineNum + lines.size() - 1)));
这段代码仍然错误地返回 true
。
当我将代码重构成以下形式时:
int start = startLineNum;
int end = startLineNum + lines.size() - 1;
return lineNum >= start && lineNum <= end;
现在它按预期返回false
。
这是怎么回事?我以前从未遇到过这种奇怪的情况。