我有以下代码片段:
cout << indexCoveredA[a.size()-1] << " "<< b.size()-1 << endl;
if (indexCoveredA[a.size()-1] < (b.size() - 1) ) {
cout << "entered";
}
Run Code Online (Sandbox Code Playgroud)
其中a
,b
,indexCoveredA
和indexCoveredB
是std::vector<int>
.
当我运行此代码时,控制台打印:
-1 4
Run Code Online (Sandbox Code Playgroud)
这意味着在if条件下,LHS小于RHS.但是,不打印"输入",这意味着if条件被评估为false.
现在,如果我将条件更改为(indexCoveredA[a.size()-1] + 1 < b.size() )
,则在控制台中打印"已输入".
我已经尝试过使用MSVC和minGW编译器.我无法理解为什么会这样.
有人可以解释一下吗?
谢谢.
类型indexCoveredA[]
是int
,但是类型b.size()
是无符号类型(无论size_t
是什么,或者是unsigned int
或者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;
}
}
Run Code Online (Sandbox Code Playgroud)
这打印not less
.
如果我使用G ++编译并启用警告,我会收到以下警告,提示问题:
x.c: In function ‘int main()’:
x.c:8: warning: comparison between signed and unsigned integer expressions
Run Code Online (Sandbox Code Playgroud)
您可能会为编译器打开警告.