我有以下代码段:
cout << indexCoveredA[a.size()-1] << " "<< b.size()-1 << endl;
if (indexCoveredA[a.size()-1] < (b.size() - 1) ) {
cout << "entered";
}
其中a
,b
,indexCoveredA
和indexCoveredB
为std::vector<int>
。
当我运行此代码时,控制台会打印:
-1 4
这意味着在if条件下,LHS小于RHS。但是,不会打印“输入”,这意味着if条件被评估为false。
现在,如果我将条件更改为(indexCoveredA[a.size()-1] + 1 < b.size() )
,则会在控制台中打印“已输入”。
我已经尝试过使用MSVC和minGW编译器。我无法理解为什么会这样。
有人可以解释一下吗?
感谢。
答案 0 :(得分:6)
indexCoveredA[]
的类型为int
,但b.size()
的类型为无符号类型(无论size_t
是什么,可能是unsigned int
或{{ 1}})。
结果,此比较作为无符号比较执行。作为无符号数字,unsigned long long
看起来比-1
大得多。
您可以尝试使用此示例向自己演示:
4
这会打印#include <iostream>
int main()
{
int i = -1;
unsigned u = 4;
if (i < u)
{
std::cout << "less" << std::endl;
} else
{
std::cout << "not less" << std::endl;
}
}
。
如果我使用G ++编译并启用了警告,我会收到以下警告,提示问题:
not less
您可能会为编译器启用警告。