我正在尝试比较以下两个量:整数“ i”和向量v的大小。
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector <int> v(26,0);
int i = -1;
cout << i << " " << v.size() << endl;
if (i < v.size()) cout << "a1" << endl;
else cout << "b1" << endl;
if (-1 < 26) cout << "a2" << endl;
else cout << "b2" << endl;
return 0;
}
当我运行以下代码时,得到的输出是: -1 26 11 a2
我希望它能给: -1 26 a1 a2
为什么会这样?
答案 0 :(得分:1)
i < v.size()
的两个参数是int
(已签名)和size_t
(未签名)。在这种情况下,C ++规则规定已签名的数量首先转换为未签名的数量。因此-1
转换为无符号数量。这是通过将无符号范围添加到所讨论的数字来完成的。在-1
的情况下,这将导致最大可能的无符号数量,该数量大于v.size()
的任何数量,从而使同谋为假。
我确定你知道为什么-1 < 26
是正确的。
在比较整数时,尽量不要混用有符号和无符号类型。可能会导致意外。您的编译器应对此发出警告。